实验目的:
通过本次实验让学生了解TensorFlow构建整个神经网络训练模型的基本思想,掌握TensorFlow实现线性回归的流程和方法,并学会使用tensorboard graph来以图形化的方式查看和检查自己所设计的神经网络模型。 实验仪器设备及材料: 安装有Python运行环境的电脑。
实验内容
一.TensorFlow环境安装
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,配置环境即可
二.利用TensorFlow进行线性回归实验
给定一批由 y = 3x + 2 生成的数据集(x, y),建立线性回归模型 h(x) = wx + b,预测出 w = 3 和 b = 2。
实验要求:
1 生成拟合的数据集
数据集只含有一个特征向量,注意误差项需要满足高斯分布。使用了numpy和matplotlib库。numpy是Python的一个开源数值科学计算库,可用来存储和处理大型矩阵。matplotlib 是 Python 的绘图库,它可与 numpy 一起使用,提供了一种有效的 MatLab 开源替代方案 其代码如下:
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
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_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
plt.scatter(x_data,y_data,c='b')
plt.show()
产生的数据分布如下所示:
2 构建线性回归的Graph
w = tf.Variable(tf.random_uniform([1],-1.,1.),name='myw')
b = tf.Variable(tf.zeros([1]),name='myb')
y = w * x_data + b
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')
3 在Session中运行构建好的Graph
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
for step in range(20):
sess.run(train)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
writer = tf.summary.FileWriter("./mytmp",sess.graph)
打印下w和b,损失值的变化情况,可以看到损失值从0.24降到0.0008.
4 绘制拟合曲线
plt.scatter(x_data,y_data,c='b')
plt.plot(x_data,sess.run(w)*x_data+sess.run(b))
plt.show()
如图:
5 tensorboard展示神经网络的graph
在上面的程序设计中有代码: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 ,就会展示刚才程序设计的神经网络的图形显示。如下图所示:
实验记录以及实验过程中遇到的问题以及解决方案:
1.程序运行报错
tensorflow显示没有random_uniform模块 解决办法:tf2.0里改名字了,用tf.random.uniform 代替
2.程序运行报错
TensorFlow2.0版本运行程序报错 解决办法:
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版本。
3.格式报错
先查看tensorboard安装位置,笔者使用的是Anaconda3,可以在Anaconda3下的搜索tensorflow,寻找其下Scripts文件下查找有没有tensorboard.exe文件,如果存在的话那就是没有配置tensorboard环境变量。
这个好了之后又出现问题, 路径中不能有空格,删掉就好了
4.页面报错
进入http://localhost:6006 会报错
把主机的用户名修改为 localhost (Win10系统主机用户名修改(修改后需要重启电脑),还是报错,(这种方法不仅没有用,还会导致后续连不上网,不建议读者使用,因为笔者使用过,此处仅作记录供借鉴) 在pycharm中再次尝试:(关掉cmd命令行!!!据观察,如果你想要开启另外一个新的计算图,一定要把原来的cmd命令行窗口关闭,再重复上述步骤,不然打开的将依然是上一个计算图。) 在pycharm的菜单栏,选择View–Tool Windows–Terminal 然后执行:
tensorboard --logdir=mytmp
进入页面之后,执行成功!!!
|