通过本次实验让学生了解TensorFlow构建整个神经网络训练模型的基本思想,掌握TensorFlow实现线性回归的流程和方法,并学会使用tensorboard graph来以图形化的方式查看和检查自己所设计的神经网络模型。
实验仪器设备及材料:
安装有Python运行环境的电脑。
1.在anaconda prompt窗口进行安装(anaconda3)最好新建一个虚拟环境,之后在环境中操作安装(默认环境是base)
conda create -n tf2 python=3.6.5
这是新建了一个名为tf2,并且python版本是3.6.5的一个环境(python版本号要跟你自己的版本号匹配)。
切换到某个环境:conda activate 环境名。
2.进入刚刚创建的tf2环境:
conda activate tf2
3.安装TensorFlow2.4.0
pip install tensorflow-cpu==2.4.0
或者镜像安装 pip install tensorflow-cpu==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
这里可能有点久,要保证不能断网。它会另外安装其他的包,这些包在机器学习中也会经常用到。如果出现红字,再安装一次。直到出现successfull installed …,表明已经成功安装好了tensorflow包。下图是2.5.0版本安装成功示意图:
4.之后若使用pycharm工具软件,不需要再安装TensorFlow,配置环境即可
给定一批由 y = 3x + 2 生成的数据集(x, y),建立线性回归模型 h(x) = wx + b,预测出 w = 3 和 b = 2。
数据集只含有一个特征向量,注意误差项需要满足高斯分布。使用了numpy和matplotlib库。numpy是Python的一个开源数值科学计算库,可用来存储和处理大型矩阵。matplotlib 是 Python 的绘图库,它可与 numpy 一起使用,提供了一种有效的 MatLab 开源替代方案
其代码如下:
#首先导入3个库:
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
#随机产生数据点100个,随机概率符合高斯分布(正态分布)
num_points = 100
vectors_set = []
for i in range(num_points):
x1 = np.random.normal(0.,0.55)
y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0,0.03)
vectors_set.append([x1,y1])
#定义特征向量x
x_data = [v[0] for v in vectors_set]
#定义标签向量y
y_data = [v[1] for v in vectors_set]
#按[x_data,y_data]在X-Y坐标系中以打点方式显示,调用plt建立坐标系并将值打印输出
plt.scatter(x_data,y_data,c='b')
plt.show()
#利用TensorFlow随机产生w和b,为了图形显示需要,分别定义名称myw和myb
w = tf.Variable(tf.random_uniform([1],-1.,1.),name='myw')
b = tf.Variable(tf.zeros([1]),name='myb')
#根据随机产生的w和b,结合上面随机产生的特征向量x_data,经过计算得出预估值
y = w * x_data + b
#以预估值y和实际值y_data之间的均方差作为损失
loss = tf.reduce_mean(tf.square(y-y_data,name='mysquare'), name='myloss')
#采用梯度下降法来优化参数
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss,name='mytrain')
#global_variables_initializer初始化Variable等变量
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
#迭代20次train
for step in range(20):
sess.run(train)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
#写入磁盘,提供tensorboard在浏览器中展示用
writer = tf.summary.FileWriter("./mytmp",sess.graph)
打印下w和b,损失值的变化情况,可以看到损失值从0.24降到0.0008.
plt.scatter(x_data,y_data,c='b')
plt.plot(x_data,sess.run(w)*x_data+sess.run(b))
plt.show()
在上面的程序设计中有代码:writer = tf.summary.FileWriter("./mytmp",sess.graph)
运行改代码后就可以将整个神经网络节点信息写入到./mytmp
目录下(该目录与前面建立的程序在一个目录)。在cmd中通过“cd 目录”切换到该目录下,输入“dir”命令显示该目录下刚才运行的日志文件,最后输入tensorboard --logdir=D:\PyCharm2018.3.7\workpase\eg001\mytmp
,回车运行后出现显示信息,信息最后一行中出现“TensorBoard 2.0.2 at http://localhost:6006/ (Press CTRL+C to quit)
”,打开chrome浏览器,在浏览器地址栏中输入 http://localhost:6006
,就会展示刚才程序设计的神经网络的图形显示。如下图所示:
tensorflow显示没有random_uniform模块
解决办法:tf2.0里改名字了,用tf.random.uniform
代替
import tensorflow as tf
改为
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
tf.disable_v2_behavior():此函数可以在程序开始时调用(在创建张量、图形或其他结构之前,以及在初始化设备之前)。它将TensorFlow 1.x和2.x之间所有不同的全局行为切换为预定的1.x行为,就是屏蔽2.x版本。
先查看tensorboard安装位置,笔者使用的是Anaconda3,可以在Anaconda3下的搜索tensorflow,寻找其下Scripts文件下查找有没有tensorboard.exe文件,如果存在的话那就是没有配置tensorboard环境变量。
进入http://localhost:6006
会报错
把主机的用户名修改为 localhost
(Win10系统主机用户名修改(修改后需要重启电脑),还是报错,
在pycharm中再次尝试:
在pycharm的菜单栏,选择View–Tool Windows–Terminal
然后执行:
tensorboard --logdir=mytmp