注:学习环境为anaconda+tensorflow+TensorBoard+Jupyter
Kali下打开Jupyter:终端里输入jupyter notebook
命令即可,按Ctrl+Enter执行
Kali下启动TensorBoard:在终端输入tensorboard --logdir=/root/condalog
,其中/root/condalog
是我的日志存放路径,之后访问返回的url即可,默认为:http://localhost:6006
,也可以用--port
参数修改端口号
一、TensorFlow计算模型-计算图
1、计算图:是一个有向图,由节点和有向边构成。
- 节点:代表操作,是一种运算
- 有向边:代表节点之间的关系
- 常规边(实线):代表数据依赖关系,即两个节点间的数据传递
- 特殊边(虚线):代表控制依赖关系,即两个节点之间的控制相关性,eg:happen-before关系
eg:计算图实例
node3并不是一个数值,而是一个张量结构,以上只是创建了计算图,建立了静态计算模型
2、计算图的执行:
计算图创建后(即创建好节点后),需要执行对话才能提供数据并获得结果
eg:会话的创建、运行、关闭
二、张量(tensor):
在TensorFlow中,所有的数据都通过张量表示。张量可以理解为多维数组:
零阶张量 表示 标量(scalar),即一个数字;
一阶张量 表示 向量(vector),即一维数组;以此类推
张量没有真正的保存数字,而是保存计算过程。
1、张量的属性:
Tensor("node:src_output",shape=(),dtype=float32)
- node是节点名称,src_output是来自节点的第几个输出;
- shape是张量的维度信息,shape=()表示缺省状态,即为标量
- dtype是数据类型,TensorFlow不允许出现数据类型不匹配的情况
node3的属性为:Tensor("Add:0",shape=(),dtype=float32)
2、张量的形状shape:
3、获取张量的元素:
4、张量的数据类型:
三、操作(operation)
计算图中的节点就是操作
eg:该例中共有4种操作,在TensorBoard中显示为a、b、c、d四个节点
从TensorBoard中查看结果图
第六讲:线性回归问题TensorFlow实战(y=2x+1)
使用TensorFlow进行算法设计与训练的核心步骤:
1、准备数据
2、构建模型
3、训练模型
4、进行预测
一、准备数据
1、人工数据集生成
#保证图像在Jupyter显示
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
#设置随机种子
np.random.seed(5)
#生成[-1,1]区间内的等差数列,个数为100个
x_data=np.linspace(-1,1,100)
#生成训练样本,在y=2x+1的基础上,添加幅度为0.4的抖动
y_data=2*x_data+1.0+np.random.randn(*x_data.shape)*0.4
2、利用matplotlib画出生成的数据集
#画出数据集的散点图
plt.scatter(x_data,y_data)
#画出要学习的线性函数
plt.plot(x_data,2*x_data+1.0,color='red',linewidth=3)
结果图如下:
二、构建模型
从这里开始使用TensorFlow
#定义占位符,可以理解为还未确定数值的变量
x=tf.placeholder("float",name="x")
y=tf.placeholder("float",name="y")
#定义模型函数,
def model(x,w,b):
return tf.multiply(x,w)+b
#定义变量
w=tf.Variable(1.0,name="w0")
b=tf.Variable(0.0,name="b0")
#预测值,存储model函数的返回值
pred=model(x,w,b)
三、训练模型
#训练轮数:
train_epochs=10
#学习率:
learning_rate=0.05
#控制显示loss的粒度:
display_step=10 #每10个训练样本输出一个损失
#损失函数(以均方差衡量):
loss_function=tf.reduce_mean(tf.square(y-pred))
#梯度下降优化器:
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
#声明会话
sess=tf.Session()
#初始化变量
init=tf.global_variables_initializer()
sess.run(init)
#开始训练
step=0
loss_list=[]
for epoch in range(train_epochs):
for xs,ys in zip(x_data,y_data):
_,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
loss_list.append(loss)
step=step+1
if step%display_step==0:
print("Train Epoch:",'%02d'%(epoch+1),"Step:%03d"%(step),"loss=",\"{:.0f}".format(loss))
b0tmp=b.eval(session=sess)
w0tmp=w.eval(session=sess)
plt.plot(x_data,w0tmp*x_data+b0tmp)
训练结果图:
四、预测
x_test=3.21
predict=sess.run(pred,feed_dict={x:x_test})
print("predict value: %f"%predict)
target=2*x_test+1.0
print("object value: %f"%target)
结果: