在新的算法理论不断涌现的同时,各种深度学习框架也不断出现在人们视野,比如Torch,Caffe等等。TensorFlow是Google开发的第二代机器学习系统,于2015年底开源,成为了新一代流行的机器学习的算法框架,感觉有必要掌握一下,所以报了个初级班学习,做点笔记。
名词
使用图(graphs)来表示计算任务
其中每一个运算操作(operation)将作为一个节点(node)
在计算图边中流动(flow)的数据被称为tensor张量
在会话(Session)的上下文中执行图
通过变量(Variable)维护状态
实战案例一
首先通过pip install安装tensorflow
#导入tf,以下同
import tensorflow as tf
#创建一行两列的矩阵常量,
m1= tf.constant([[3,3]])
#创建两行一列的矩阵常量
m2= tf.constant([[2],[3]])
#创建乘法矩阵,matmul是矩阵乘法函数
product = tf.matmul(m1,m2)
不能直接print(product),必须放到对话里。
#调用sess的run方法来执行矩阵乘法op,启用默认值Session()
with tf.Session() as sess:
result = sess.run(product)
print(result)
实战案例二 变量的使用
#创建变量
x= tf.Variable([1,2])
a= tf.constant([3,3])
#创建减法和加法op
sub= tf.subtract(x,a)
add= tf.add(x,sub)
#初始化全局所有的变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(sub))
print(sess.run(add))
实战案例三 创建循环
#创建变量,初始化为0
state = tf.Variable(0,name="counter")
#创建op,使state加1
new_value= tf.add(state,1)
#tf中,不能直接用等号赋值,所以要用assign来赋值
update= tf.assign(state,new_value)
#变量初始化
init= tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(state)) #这里打印出来是0
for i in range(5):
sess.run(update)
print(sess.run(state))
上面这个例子有点绕,state这里老师还唯恐不乱的又给了个名字counter。要搞清楚state,new_value,update之间的关系。
实战案例四 Fetch 同时运行
#定义三个常量
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
add = tf.add(input2,input3)
mul = tf.multiply(input1,add)
with tf.Session() as sess:
result = sess.run([mul,add])
#这里同时运行乘法和加法op
print(result)
fetch并不是一个命令,它是指同时运行,这里就是乘法和加法op
实战案例五 Feed 占位符
定义三个占位符
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)
with tf.Session() as sess:
#feed的数据以字典形式传入,用feed_dict
print(sess.run(output,feed_dict={input1:[7.],input2:[2]}))
结果是14.
实战案例六 简单的综合示例
import numpy as np
#使用np生产100个随机点
x_data = np.random.randn(100)
y_data= x_data*0.1 +0.2
#构建一个线性模型
k = tf.Variable(0.)
b = tf.Variable(0.)
y = k*x_data + b
#定义一个二次代价函数
y_data是样本的真实值,y是预测值,求出误差的square平方,再求mean平均值。就是loss啦。
loss = tf.reduce_mean(tf.square(y_data-y))
定义一个梯度下降法训练的优化器 运用已经封装好的GradientDescentOptimizer,学习率是0.2
optimizer = tf.train.GradientDescentOptimizer(0.2)
#训练的目的就是最小化代价函数,用minimize
train = optimizer.minimize(loss)
如果loss越小,那么就应该k越接近0.1,b越接近0.2.
#初始化变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for step in range(201): #迭代201次
sess.run(train) #每次会最小化loss
#每20次打印k和b的值:
if step%20 == 0:
print(step,sess.run([k,b]))
以上案例运行结果,可以看出,tensorflow的拟合结果很强。
课程是dataguru的,有兴趣者自行搜索吧。