TensorFlow训练网络过程中出现NAN值

在神经网络训练过程中,可能会出现Weight/Bias等值为NaN(Not a Number)的问题,这是因为在训练过程中权重出现了无穷与非数值的情况。现就出现NAN值问题的原因及解决方案进行总结。未完待续。。。

1. 学习率设置问题

学习率设置不到可能会导致出现NAN值,而且通常是学习率过大导致。

2. 优化器选择问题

在用多元线性回归解决房价预测问题时就遇到过权重出现NAN值问题。先采用的是tf.train.GradientDescentOptimize优化算法,结果训练过程中权重出现了NAN值,后来改用tf.train.AdamOptimize优化算法问题得到了解决。至于为什么还有待深究!

案例分析:

import tensorflow as tf
import numpy as np

houses = 100
features = 2

x_data = np.zeros([houses, 2])
for house in range(houses):
    x_data[house, 0] = np.round(np.random.uniform(50., 150.))
    x_data[house, 1] = np.round(np.random.uniform(3., 7.))
weights = np.array([[2.], [3.]])
y_data = np.dot(x_data, weights)   # 点积

x_data_ = tf.placeholder(tf.float32, [None, 2])
y_data_ = tf.placeholder(tf.float32, [None, 1])
weights_ = tf.Variable(np.ones([2, 1]), dtype=tf.float32)
y_model = tf.matmul(x_data_, weights_)

loss = tf.reduce_mean(tf.pow((y_model - y_data_), 2))
train_op = tf.train.AdamOptimizer(0.01).minimize(loss)

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
# sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

for _ in range(100):
    for (x, y) in zip(x_data, y_data):
        z1 = x.reshape(1, 2)
        z2 = y.reshape(1, 1)
        sess.run(train_op, feed_dict={x_data_: z1, y_data_: z2})
    print("--------------")
    print(sess.run(weights_))

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值