A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

在神经网络训练过程中,可能会出现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_))




您需要登录后才可以回帖 登录 | 加入黑马