1.基本操作
1.1张量,图,会话
import tensorflow as tf
a=tf.constant([1.0,2.0]) #tf.constant(),创建张量
b=tf.constant([3.0,4.0])
result=a+b
print result #此时tf的tensor不同于array,只能print出shape
需要在会话中,得到result的数值。并且通过sess.run()转化为array,可以通过这种方式查看网络的输出。
with tf.Session() as sess:
tf.global_variables_initializer() #必要的全局变量初始化。
print sess.run(y)
占位符机制
创建了一个位置,相当于一个壳子,内部并没有具体的数值,需要进行ini,对壳子进行填充。
x=tf.placeholder(tf.float32,shape=(1,2),name="input") #
tensor变量
a=tf.Variable([shape]) #创建一定shape的变量
tf.random_normal() #生成正态分布随机数
tf.truncated_normal() #去大偏离点的正态
tf.random_uniform() #均匀分布随机
tf.zeros() #全0
tf.ones() #全1
tf.ones_like(input) #生成和输入张量一样形状和类型的1
tf.zeros_like(input) #生成和输入张量一样形状和类型的0
tf.fill(shape,value) #全部为某一个给定值
tf.constant([]) #给指定值,可不同
1.2 Tensor操作运算
1.2.1 Tensor的运算
tf.add(x, y, name=None) # 加法(支持 broadcasting) 和 + 等价
tf.add_n([q1,q2,q3]) # 多项加法,列表内的tensor总的相加,输出tensor
tf.subtract(x, y, name=None) # 减法
tf.multiply(x, y, name=None) # 乘法
tf.divide(x, y, name=None) # 浮点除法, 返回浮点数(python3 除法)
tf.mod(x, y, name=None) # 取余
# 幂指对数操作符:^ ^2 ^0.5 e^ ln
tf.pow(x, y, name=None) # 幂次方
tf.square(x, name=None) # 平方
tf.sqrt(x, name=None) # 开根号,必须传入浮点数或复数
tf.exp(x, name=None) # 计算 e 的次方
tf.log(x, name=None) # 以 e 为底,必须传入浮点数或复数
# 取符号、负、倒数、绝对值、近似、两数中较大/小的
tf.negative(x, name=None) # 取负(y = -x).
tf.sign(x, name=None) # 返回 x 的符号
tf.reciprocal(x, name=None) # 取倒数
tf.abs(x, name=None) # 求绝对值
tf.round(x, name=None) # 四舍五入
tf.ceil(x, name=None) # 向上取整
tf.floor(x, name=None) # 向下取整
tf.rint(x, name=None) # 取最接近的整数
tf.maximum(x, y, name=None) # 返回两tensor中的最大值 (x > y ? x : y)
tf.minimum(x, y, name=None) # 返回两tensor中的最小值 (x < y ? x : y)
1.2.2 Tensor类型转换
tf.string_to_number(string_tensor,out_type=None,name=NOne) 字符串转为数字
tf.to_double(x,name=“ToDouble”) #转为64位浮点类型
tf.to_float(x,name=“ToFloat”) #转为32位浮点类型
tf.to_int32(x,name=“ToInt32”) #转为32位整型
tf.to_int64(x,name=“ToInt64”) #转为64位整型
tf.cast(x,dtype,name=None) 将x的类型转成dtype指定的类型
1.3 反向传播
Lossfunction
loss_MSE = tf.reduce_mean(tf.square(y-yu)) #MSE
优化器
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_MSE) #梯度下降
train_step = tf.train.MomentumOptimizer(0.001,0.9).minimize(loss_MSE) #冲量优化
train_step = tf.train.AdamOptimizer(0.001).minimize(loss_MSE) #Adam优化
2 Demo代码
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# 定义一个占位符x
x = tf.placeholder(tf.float32, [None, 784]) # 张量的形状是[None, 784],None表第一个维度任意
# 定义变量W,b,是可以被修改的张量,用来存放机器学习模型参数
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# 实现模型, y是预测分布
y = tf.nn.softmax(tf.matmul(x, W) + b)
# 训练模型,y_是实际分布
y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) # 交叉嫡,cost function
# 使用梯度下降来降低cost,学习速率为0.01
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
# 初始化已经创建的变量
init = tf.global_variables_initializer()
# 在一个Session中启动模型,并初始化变量
sess = tf.Session()
sess.run(init)
# 训练模型,运行1000次,每次随机抽取100个
for i in range(1, 1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# 验证正确率
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float'))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))