Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tensorflow优化器输出nan,即使我将学习速率设置为尽可能小_Python_Tensorflow_Optimization - Fatal编程技术网

Python tensorflow优化器输出nan,即使我将学习速率设置为尽可能小

Python tensorflow优化器输出nan,即使我将学习速率设置为尽可能小,python,tensorflow,optimization,Python,Tensorflow,Optimization,下面是代码 def create_train_model(hidden_nodes,num_iters): tf.reset_default_graph() X=tf.placeholder(shape=(120,4),dtype=tf.float64,name='X') y=tf.placeholder(shape=(120,1),dtype=tf.float64,name='y') W1=tf.Variable(np.random.rand(4,hidden_

下面是代码

def create_train_model(hidden_nodes,num_iters):
    tf.reset_default_graph()
    X=tf.placeholder(shape=(120,4),dtype=tf.float64,name='X')
    y=tf.placeholder(shape=(120,1),dtype=tf.float64,name='y')
    W1=tf.Variable(np.random.rand(4,hidden_nodes),dtype=tf.float64)
    W2=tf.Variable(np.random.rand(hidden_nodes,2),dtype=tf.float64)
    A1=tf.sigmoid(tf.matmul(X,W1))
    U_est=tf.sigmoid(tf.matmul(A1,W2))
    loss=fuloss3(U_est,y)
    optimizer=tf.train.AdagradOptimizer(4.9406564584124654e-324)
    TRAIN=optimizer.minimize(loss)
    init=tf.initialize_all_variables()
    sess=tf.Session()
    sess.run(init)
    for i in range(num_iters):
        pout=sess.run(loss,feed_dict={X: Xtrain, 
                                  y: ytrain})
        sess.run(TRAIN,feed_dict={X: Xtrain, 
                                  y: ytrain})
        loss_plot[hidden_nodes][i]=sess.run(loss,feed_dict={X: Xtrain,y: 
                                                            ytrain})
        print(pout)
        weights1=sess.run(W1)
        weights2=sess.run(W2)
        print(weights1)
        print(weights2)
    print('loss (hidden nodes: %d, iterations: %d): %.2f'%(hidden_nodes,
                            num_iters,loss_plot[hidden_nodes][num_iters-1]))
    sess.close()
    return weights1, weights2

print(pout)
返回一个非
nan
数字。训练结束后,体重全部恢复
nan
。即使我已将学习率设置为尽可能最小的水平。为什么会发生这种情况?在学习率如此之小的情况下,你基本上不会移动变量。从
pout
中可以明显看出,最初的运行损失给出了一个有效的结果,这意味着我如何设置损失不是一个问题。提前谢谢。

我想你的问题在这里:

W1=tf.Variable(np.random.rand(4,hidden_nodes),dtype=tf.float64)
W2=tf.Variable(np.random.rand(hidden_nodes,2),dtype=tf.float64)
试试这个:

W1 = tf.get_variable("W1", shape=..., dtype=...,
                     initializer=tf.contrib.layers.xavier_initializer())
W2 = tf.get_variable("W2", shape=..., dtype=...,
                     initializer=tf.contrib.layers.xavier_initializer())
您的权重初始化在[0,1]范围内,这是相当大的权重。这将以剧烈的梯度波动启动网络,这可能会让你陷入
NaN
的境地

xavier初始值设定项将考虑到节点的输入数量,并初始化该值,以便不会使节点饱和。在横向术语中,它根据您的体系结构智能地初始化权重

注意,这个初始值设定项也有一个循环版本

或者,作为一个快速测试,您可以通过简单地将随机权重乘以一个小值(如1e-4)来减少权重初始化的大小


如果这不能解决问题,请在这里发表评论。

谢谢,我试过了。不幸的是,它仍然输出
nan
权重。我会再次检查我的损失函数,确保它总是输出一个有限的数字。我已经重新打开了。奇怪的是,我的丢失仍然会给出一个初始的非
nan
输出。然而,最轻微的更新就完全摧毁了它。这意味着损失的导数是无限的,或者说是nan,所以我的损失有一个平方根。它的导数是
0.5/sqrt(x)
如果
x=0
,这将是一个问题,即使
sqrt(0)
不是。所以我把它改为
sqrt(x+e)