下面是代码。在
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
数字。训练后,体重全部恢复。即使我把学习率设为最小。为什么会这样?由于学习率很小,你基本上不会移动变量。从pout
可以明显看出,初始运行损失给出了一个有效的结果,这意味着我如何设置损失不是问题。提前谢谢。在
我怀疑是你的问题:
试试这个:
^{pr2}$权重初始化在[0,1]范围内,这是相当大的权重。这将使网络从剧烈的梯度波动开始,很可能会让你陷入
NaN
的境地。在xavier初始化器将考虑到节点的输入数量,并初始化该值,以使节点不会饱和。在专业术语中,它根据您的架构智能地初始化权重。在
注意,这个初始值设定项也有一个会议版本。在
或者,作为一个快速测试,您可以通过简单地将随机权重乘以一个小值(如1e-4)来减小权重初始化的大小。在
如果不能解决问题,请在这里发表评论。在
相关问题 更多 >
编程相关推荐