首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TensorFlow和NumPy值打印到标准输出

将TensorFlow和NumPy值打印到标准输出
EN

Stack Overflow用户
提问于 2018-01-23 20:47:08
回答 1查看 193关注 0票数 0

我在将numpy.float32()值打印到stdout时遇到了一些问题。以下是代码:

代码语言:javascript
复制
import numpy as np
import tensorflow as tf

n_samples = 1000
batch_size = 100
num_steps = 20000

x_data = np.random.uniform(1, 10, (n_samples, 1))
y_data = 2 * x_data + 1 + np.random.normal(0, 2, (n_samples, 1))

x = tf.placeholder(tf.float32, shape=(batch_size, 1))
y = tf.placeholder(tf.float32, shape=(batch_size, 1))

with tf.variable_scope('linear-regression'):
    k = tf.Variable(tf.random_normal((1, 1)), name='slope')
    b = tf.Variable(tf.zeros(1,), name='bias')

y_pred = tf.matmul(x, k) + b
loss = tf.reduce_sum((y - y_pred) ** 2)
optimizer = tf.train.GradientDescentOptimizer(0.05).minimize(loss)

display_step = 5000
with tf.Session() as session:
    session.run(tf.global_variables_initializer())
    for i in range(num_steps):
        indices = np.random.choice(n_samples, batch_size)
        x_batch, y_batch = x_data[indices], y_data[indices]
        _, loss_val, k_val, b_val = session.run((optimizer, loss, k, b), feed_dict={x: x_batch, y: y_batch})
        if (i + 1) % display_step == 0:
            print(f'Epoch {i+1}: loss = {loss_val.item():.3f}, k = {np.sum(k_val).item():.3f}, b = {np.sum(b_val).item():.3f}')

当我试图在最后一个字符串中打印值时,我得到如下内容:

代码语言:javascript
复制
Epoch 5000: loss = nan, k = nan, b = nan
Epoch 10000: loss = nan, k = nan, b = nan
Epoch 15000: loss = nan, k = nan, b = nan

我使用的是视觉代码(Windows 10)。在调试模式下,我尝试打印loss_val值,并将其转换为Python本机浮点值,然后再打印,但不获取任何值。

谢谢你的帮助

P.S. TensorFlow 1.4.0,NumPy 1.14,Windows 10,视代码为IDE。

更新

在“if-statment”中停止的调试模式中,我尝试过

代码语言:javascript
复制
print(1)

并得到:

代码语言:javascript
复制
None
1

我做错什么了?看起来像是某种重新定义print()的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-03 10:27:09

您可以看到NaNs,因为网络中的值正在迅速增长,变得太大,无法适应float。这次爆炸主要是由你的超参数引起的:

  • k初始值太大,降低了标准差,例如: K=tf.Variable(tf.random_normal(1,1),stddev=0.001),名称=‘斜率’)
  • 学习速度也太高,尝试0.01而不是0.05
  • 您应该使用tf.reduce_mean而不是tf.reduce_sum来保持损失和梯度调整到批处理大小。

结果代码:

代码语言:javascript
复制
x = tf.placeholder(tf.float32, shape=(batch_size, 1))
y = tf.placeholder(tf.float32, shape=(batch_size, 1))

with tf.variable_scope('linear-regression'):
  k = tf.Variable(tf.random_normal((1, 1), stddev=0.001), name='slope')
  b = tf.Variable(tf.zeros(1, ), name='bias')

y_pred = tf.matmul(x, k) + b
loss = tf.reduce_mean((y - y_pred) ** 2)
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

PS。如果希望获得更好的结果,还应该考虑将输入规范化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48410530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档