import tensorflow as tf
from numpy.random import RandomState
batch_size=8
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
x=tf.placeholder(tf.float32,shape=(None,2),name='x-input')
y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input')
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
cross_entropy=-tf.reduce_mean(
y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
rdm=RandomState(1)
dataset_size=128
X=rdm.rand(dataset_size,2)
Y=[[int(x1+x2<1)]for (x1,x2) in X]
with tf.Session() as sess:
init_op=tf.initialize_all_variables()
sess.run(init_op)
print(sess.run(w1))
print(sess.run(w2))
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
[[-0.8113182 ]
[ 1.4845988 ]
[ 0.06532937]]
STEPS = 500
for i in range(STEPS):
start = (i * batch_size) % dataset_size
end = min(start + batch_size, dataset_size)
sess.run(train_step,
feed_dict={x: X[start:end], y_: Y[start:end]})
if i % 1000 == 0:
total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_: Y})
print("After %d training step(s),cross entropy on all data is %g" % (i, total_cross_entropy))
print(sess.run(w1))
print(sess.run(w2))
[[-1.9618274 2.582354 1.6820377]
[-3.4681718 1.0698233 2.11789 ]]
[[-1.8247149]
[ 2.6854665]
[ 1.418195 ]]
在运行这一块代码地过程中遇到的问题 :
1.RuntimeError: Attempted to use a closed Session.
如果“STEPS=500”与“with tf.Session() as sess1:”对齐就会有这样的提示。
解决办法:把“STEPS=500”及以下的code整体向后移。
全选,按Tab键即可
2.ValueError: No gradients provided for any variable
报错信息的意思是,提供给minimize函数的var_list参数中的变量没有梯度,需要检查你的图的操作是否在这些变量中支持梯度。
经过检查,发现优化器指定的loss参数中,与var_list参数中的变量无任何关系导致了上述错误,因此,需要检查loss和var_list两个参数的关联性,确保loss由指定的var_list中的变量来计算
也就是之前变量名称可能有错误,改回来就是了
3.变量没被定义的问题
刚开始是看到我一脸懵,因为出错的那行代码是我正在定义的那行 ,然后看不出错误,最终发现那个其实就是因为上一行 代码搞错掉楼,所以如果那行代码错了,不要局限,请全面发展的眼光看问题
4.如何在Pycharm里接着运行部分代码(运行了一部分 再运行一部分,新手小白
琢磨了半天)
琢磨了半天的结果是没琢磨出来,看到这篇文章的大佬可以告诉我一下吗?有人告诉我就是不可以,可是我不信,不信,
5.每隔一段时间计算交叉熵并输出,这个我一直就没输出结果,也不知道是哪里出现了问题,,,,,没解决
刚刚已经解决了,怕是个傻子,i 写成了1 ,有结果才怪的
6.最后输出参数时,一下子给我输出了好多个结果,虽然迭代最后结果是正确的吧,以后可以省事点
7.Debug 是修正错误的意思
网友评论