Tensorflow学习笔记【1】

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}))

发布了9 篇原创文章 · 获赞 10 · 访问量 2499

猜你喜欢

转载自blog.csdn.net/qq_42281425/article/details/105561385