此系列文档为学习中国大学mooc,浙江大学开设的《深度学习应用开发-TensorFlow实践》随堂笔记。
有标签样本
具有{特征,标签}:{x,y}用于训练模型无标签样本
具有{特征,?}:{x,?}用于对新数据的预测。训练
模型:通过有标签样本学习确定所有权重和偏差的理想值经验风险最小化
单个样本
而言模型预测的准确性;完全预测准确则损失为0,否者损失会较大训练模型的目标
是从所有样本中找到一组平均损失”较小“
的权重和偏差梯度
一个向量(矢量),表示某一函数在该点导数
沿着该方向取得的最大值
,即是函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。学习率(学习速率/步长)
:学习率过小花很长世间花费时间太长,梯度学习速率过大则找不到最低点超参数
:机器学习之前要设置的参数,而不是通过训练得到的参数数据,通常情况下,需要对超参数进行优化,选择一组好的超参数,可以提高学习的性能和效果。典型的超参数
:学习率,神经网络的隐含层数量。。。。*元组
表示把元组拆成一个个独立的实参
Jupyter用tab
补全函数名
准备样本
#需要设置matplotlib为inline模式才能显示图像
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
#生成种子
np.random.seed(5)
#100个等差数据
x_date=np.linspace(-1,1,100)
y_date=2*x_date+1.0+np.random.randn(*x_date.shape)*0.4
plt.scatter(x_date,y_date)
#定义超参占位符
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="y0")
#创建预测过程
pred=model(x,w,b)
#迭代次数(训练轮数)
train_epochs=10
#学习率,经验0.01~0.1
learning_rate=0.05
loss_function=tf.reduce_mean(tf.square(y-pred))
optimizer
,初始化一个GradientDescentOptimizer
设置一个学习率和优化目标:最小化损失optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
for epoch in range(train_epochs)
for xs,ys in zip(x_date,y_date):
_,loss= sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
b0temp=b.eval(session=sess)
w0temp=w.eval(session=sess)
plt.plot(x_date,w0temp*x_date+b0temp)
解释
:
zip(x_date,y_date),x_date,y_date
都是一维100个元素的数组,zip
可以合并成一个一维200个元素的数组,但是x_date,y_date
按顺序交叉排列x_test=3.31
predict=sess.run(pred,feed_dict={x:x_test})
print("预测值: %f"%predict)
target=2*x_test+1.0
print("目标值: %f"%target)