一、基础内容
1、创建图、启动图
import tensorflow as tf
#创建一个常量op
m1 = tf.constant([[3,3]]) //可以打出con之后按tab键会智能补全
#创建一个常量op
m2 = tf.constant([[2],[3]])
#创建一个矩阵乘法的op,把m1和m2传入
product = tf.matmul(m1,m2)
print(product)
运行:
Tensor("MatMul_1:0", shape=(1, 1), dtype=int32) //因为没有在sess里面进行,只生成了tensor类型
修改一:
import tensorflow as tf
m1 = tf.constant([[3,3]])
m2 = tf.constant([[2],[3]])
product = tf.matmul(m1,m2)
#定义一个绘画启动默认图
sess = tf.Session()
#调用sess的run方法来执行矩阵乘法op
#run(product)触发了图中的三个op
result = sess.run(product) #会一层一层往上去调用
print(result)
sess.close()
执行;
[[15]]
方法二;
用更简单的with来启动默认图
import tensorflow as tf
m1 = tf.constant([[3,3]])
m2 = tf.constant([[2],[3]])
product = tf.matmul(m1,m2)
with tf.Session() as sess:
#调用sess的run方法来执行矩阵乘法op
#run(product)触发了图中的三个op
result = sess.run(product) #会一层一层往上去调用
print(result)
运行:
[[15]]
2、变量
TensorFlow 中最基本的单位是常量(Constant)、变量(Variable)和占位符(Placeholder)。
常量定义后值和维度不可变,变量定义后值可变而维度不可变。
在神经网络中,变量一般可作为储存权重和其他信息的矩阵,而常量可作为储存超参数或其他结构信息的变量。
import tensorflow as tf #载入tensorflow模块
x = tf.Variable([1,2]) #创建一个变量op
a = tf.constant([3,3]) #创建一个常量op
sub = tf.subtract(x,a) #创建一个减法op,快速按两下shift+tab键可以查看函数使用方法
add = tf.add(x,a) #创建一个加法op
init = tf.global_variables_initializer() #对变量初始化,即使有多个变量,这一个语句就可以完成全部的初始化
with tf.Session() as sess: #创建一个图
sess.run(init) #先进行变量的初始化
print(sess.run(sub)) #打印运行的减法结果
print(sess.run(add)) #打印运行的加法结果
运行:
[-2 -1]
[4 5]
import tensorflow as tf
state = tf.Variable(0,name = 'counter') #创建一个变量,初始化值为0
new_value = tf.add(state,1) #创建一个op,作用是使state的值加1
update = tf.assign(state,new_value) #通过将new_value的值赋给state来更新state的值
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(state)) #打印state的初始值
for _ in range(5):
sess.run(update)
print(sess.run(state))
运行:
0
1
2
3
4
5
3、Fetch and feed
Fetch表示同时运行多个op
#Fetch
import tensorflow as tf
input1 = tf.constant(2.0)
input2 = tf.constant(3.0)
input3 = tf.constant(4.0)
add = tf.add(input1,input2)
mul = tf.multiply(input3,add)
with tf.Session() as sess:
result = sess.run([mul,add]) #Fetch表示可以同时run多个op
print(result)
运行:
[20.0, 5.0]
#Feed
input1 = tf.placeholder(tf.float32) #创建占位符
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)
with tf.Session() as sess:
print(sess.run(output,feed_dict = {input1:[8],input2 :[2]})) #占位符利用字典将值传入
运行:
[16.]
二、以线性回归示例来初探tensorflow
1、思路
- 载入模块 tensorflow、numpy
- 获得初始数据、数据归一化处理
- 构造线性模型
- 对数据进行处理,包括考虑如何使预测值误差最小(确定代价函数、优化器,训练最小代价函数)
- 创建一个图,使张量在图里面进行运行(tensorflow的由来),在先对初始变量进行初始化,再运行训练函数,得到结果,打印相关数据
2、实际操作一波
import tensorflow as tf
import numpy as np #载入numpy模块
x_data = np.random.rand(100) #随机生成100个数字
y_data = x_data*0.1 + 0.2
b = tf.Variable(0.) #创建一个变量。初始化为0
k = tf.Variable(0.)
y = k*x_data + b #构造一个线性模型
loss = tf.reduce_mean(tf.square(y-y_data)) #二次代价函数
optimizer = tf.train.GradientDescentOptimizer(0.2) #定义一个梯度下降算法来训练的优化器
train = optimizer.minimize(loss) #最小化代价函数
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for step in range(201):
sess.run(train)
if step%20 == 0:
print(step,sess.run([k,b]))
运行:
0 [0.049652644, 0.098821595]
20 [0.10023947, 0.1998795]
40 [0.100142896, 0.19992818]
60 [0.10008524, 0.19995715]
80 [0.10005086, 0.19997443]
100 [0.10003034, 0.19998476]
120 [0.10001811, 0.1999909]
140 [0.100010805, 0.19999456]
160 [0.10000645, 0.19999675]
180 [0.10000386, 0.19999805]
200 [0.10000231, 0.19999884]