学习: 人工智能实践:Tensorflow笔记(三)

主要是按照视频代码贴一下,出现的错误可以展示并给出解决方案。

  1 #coding:utf-8
  2 #导入模块,生成模拟数据集
  3 import tensorflow as tf
  4 import numpy as np
  5 BATCH_SIZE=8
  6 seed=23455
  7 #seed(n)这样生成的随机数每次是一样的
  8 #基于seed()产生随机数
  9 rng=np.random.RandomState(seed)
 10 #随机数返回32行2列的矩阵,表示32组体积和数量,作为数据集
 11 X=rng.rand(32,2)
 12 #从X这个矩阵中,取出一行,判断如果和小鱼1,给Y复制1,否则0.
 13 #作为输入数据的标签(正确答案)
 14 Y=[[int(x0+x1<1)] for (x0,x1) in X]
 15 print "X:\n",X
 16 print "Y:\n",Y
 17 
 18 #1定义神经网络的输入、参数和输出,定义前向传播过程。
 19 x=tf.placeholder(tf.float32,shape=(None,2))
 20 y_=tf.placeholder(tf.float32,shape=(None,1))
 21 
 22 w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
 23 w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
 24 a=tf.matmul(x,w1)
 25 y=tf.matmul(a,w2)
 26 
 27 
 28 #2定义损失函数和反向传播方向
 29 loss=tf.reduce_mean(tf.square(y-y_))
 30 train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
 31 #train_step=tf.train.MomentumOptimizer(0.001).minimize(loss)
 32 
 33 
 34 #3生成回话,训练STEPS轮
 35 with tf.Session() as sess:
 36   Init_op=tf. global_variables_initializer()
 37   sess.run(Init_op)
 38   #输出目前未经训练的参数取值
 39   print "w1:\n",sess.run(w1)
 40   print "w2:\n",sess.run(w2)
 41   print "\n"
 42 
 43 
 44  #训练模型
 45   STEPS=3000
 46   for i in range(STEPS):
 47         start=(i*BATCH_SIZE)%32
 48         end=start+BATCH_SIZE
 49         print(X[start:end])
 50         # x=X[start:end]
 51         # y_=Y[start:end]
 52         #sess.run(train_step,x,y_)
 53         sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
 54         if i %500 ==0:
 55              total_loss=sess.run(loss,feed_dict={x: X,y_: Y})
 56              print("AFTER %d training steps,loss on all data is %s" %(i,total_loss))
 57   #输出训练后参数
 58   print "\n"
 59   print "w1:\n",sess.run(w1)
 60   print "w2:\n",sess.run(w2)

主要结果如下

w1:
[[-0.7000663   0.9136318   0.08953571]
 [-2.3402493  -0.14641267  0.58823055]]
w2:
[[-0.06024267]
 [ 0.91956186]
 [-0.0682071 ]]

二.遇到的一些问题

2.1 报错:

 File "/home/zengjun/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1047, in _run
    raise RuntimeError('Attempted to use a closed Session.')
RuntimeError: Attempted to use a closed Session

原因:实际上是with机制帮你关闭了文件f,这样可以避免有些人读写文件后忘记关闭文件。所以with代码块里的内容运行完了,你的sess就自动由with机制帮你关闭了,因此再次使用sess就会报错。

解决办法就是把代码块向后缩进,实际上就是指,所有与sess相关的操作都必须放在with代码块下,如果需要在外面再次使用,那你就需要重新开启一个sess --------------------- 本文来自 happyangel_nan 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/weixin_39390732/article/details/76474294?utm_source=copy

具体而言就是把这部分不要与 with 平齐

 57 #输出训练后参数
 58 print "\n"
 59 print "w1:\n",sess.run(w1)
 60 print "w2:\n",sess.run(w2)

而是与with下面的一句话平齐

57    #输出训练后参数
 58    print "\n"
 59    print "w1:\n",sess.run(w1)
 60    print "w2:\n",sess.run(w2)

这样sess.run还能继续用,不然如果与with平齐,with Session就会关闭掉。

 

你可能感兴趣的:(linux,tensorflow)