博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tensorflow
阅读量:188 次
发布时间:2019-02-28

本文共 5525 字,大约阅读时间需要 18 分钟。

1 sess会话

with tf.Session() as sess:	sess.run(tf.global_variables_initializer())#如果前面创建了变量	sess.run(变量) # 运算某个变量 	sess.run(变量,feed_dic={
参数1:xxx, 参数2:xxx}) # 如果要运算的变量需要对用的传入参数

2 变量/常量的创建、使用

tf.Variable(n) #创建变量ntf.assign(a, n) #给变量n赋值为n,变量只能通过该方法完成赋值tf.constant(n) #创建常量ntf.assign(n1, n2) #给变量赋值,n1=n2tf.initialize_all_variables() #初始化创建的变量input = tf.placeholder(tf.float32) #创建占位符,像是创建输入变量,float32是数据类型sess.run(xxx, feed_dict={
input1:[2.], input2:[3.]}) #给占位符赋值tf.random_normal([n1, n2]) #从正太分布中取随机数,生成二维矩阵tf.zeros([n1, n2]) #生成二维零矩阵tf.train.GradientDescentOptimizer(0.1).minimize(loss) #随机梯度下降算法,学习率为0.1

3 运算

tf.add(n1, n2) # 加法运算tf.multiply(n1 ,n2) # 对应元素相乘tf.matmul(n1 ,n2) # 点乘tf.reduce_sum(X) # 对矩阵所有元素求和tf.reduce_sum(X, 0) # 0表示对矩阵元素按列求和,1表示对矩阵元素按行求和tf.reduce_mean(X) # 对矩阵所有元素求平均值tf.reduce_mean(X, 0) # 0表示对矩阵元素按列平均值,1表示对矩阵元素按行平均值tf.subtract(x, y) # 张量相减,x - y tf.pow(x, y) # 逐元素求幂 tf.exp(x) # 等价于 pow(e, x),其中 e 是欧拉数(2.718…) tf.sqrt(x) # 等价于 pow(x, 0.5) tf.div(x, y) # 两个张量逐元素相除 tf.truediv(x, y) # 与tf.div 相同,只是将参数强制转换为 float tf.floordiv(x, y) # 与truediv 相同,只是将结果舍入为整数tf.mod(x, y) # 逐元素取余tf.equal(A, B) # 比较矩阵,返回值为布尔型tf.cast(a,dtype=tf.bool) # 将float型转换成bool型,dtype=tf.float32表示转换成float型

4 tensorboard的使用

1) 开始/结束记录计算图

writer = tf.summary.FileWriables("logs/", sess.graph) # "logs/"是log保存的路径writer.close()

2) 跟踪某个变量

tf.summary.histogram("name", 变量)tf.summary.scalar("name", 变量)

3) 汇总跟踪的变量

merged = tf.summary.merge_all()

4) 为summery增加维度

writer.add_summary(merged, i) #此处的i就是增加的维度,是绘图需要

5) 在计算图中给块命名

with tf.name_scope("name")

5 卷积(CNN)

1)输入数据:

4维的张量,输入向量可以用tf.reshape(x,shape)转换成4维,,shape=[x x x x]
这4维:

[batch, in_height, in_width, in_channels][训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]

2)卷积核:

4维的张量,可以由tf.truncated_normal(shape, stddev=0.1) 创建,shape=[x x x x]
这4维:

[filter_height, filter_width, in_channels, out_channels][卷积核的高度,卷积核的宽度,图像通道数,卷积核个数]

3)卷积:

tf.nn.conv2d(数据, 卷积核, strides=[1,1,1,], padding="VALID")# strides: 步长# padding: 可选‘VALID’和‘SAME’,VALID表示不扩展边缘,卷积后尺寸会变小,SAME会扩展边缘,卷积后尺寸不变

4)relu激活:

tf.nn.relu(数据) # 数据一般为卷积+偏置

5)池化:

max_pool_2x2(数据) # 2x2的池化

6 反卷积

tf.layers.conv2d_transpose(h0, kernel_size=3, filters=256, strides=2, padding='same')# h0:原始层的数据# kernel_size:反卷积核的尺寸# filters:反卷积核的种类,即特征数# strides:步长# padding:反卷积的模式,分 same 和 valid 两种

1) 输入层尺寸为 2x2, kernel_size=3, strides=2, padding=‘same’ 时:

在这里插入图片描述
2)输入层尺寸为 2x2, kernel_size=3, strides=2, padding=‘valid’ 时:
在这里插入图片描述

6 tf.nn.dropout()

tf.nn.dropout(x, keep_prob,noise_shape=None, seed=None, name=None)# x: 要训练的数据# keep_prob: dropout概率,一般使用占位符。#说明:dropout就是使输入tensor中某些元素变为0,变0的概率为1-keep_prob,其它没变0的元素变为原来的1/keep_prob大小!

7 tf.variable_scope 与 tf.name_scope 的区别

共同点:都是用于管理变量组名称

不同点:tf.variable_scope 后面可以有 tf.get_variable 和 tf.Variable,而 tf.name_scope 后面只能有 tf.Variable
如:

with tf.variable_scope('V1'):      a1 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))      a2 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')  with tf.name_scope('V2'):      # a1 = tf.get_variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))  这里不能用    a2 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')

8 保存/加载训练模型

1) 保存模型:

# 下面这行需要放在函数外面saver = tf.train.Saver([w1,w2], max_to_keep=4,keep_checkpoint_every_n_hours=2)# [w1,w2]是需要保存的参数,若不指定,默认保存所有# max_to_keep是保存模型的个数,若保存了很多次,那么只存最新的那几个# keep_checkpoint_every_n_hours表示多少小时自动保存一次with tf.Session() as sess:	sess.run(tf.global_variables_initializer()) 	saver.save(sess, "model/my-model", global_step=epoch)

2) 加载模型:

with tf.Session() as sess:	saver =tf.train.import_meta_graph('model/my-model.meta')    saver.restore(sess,tf.train.latest_checkpoint("model/"))

3) 演示程序

该演示程序可以随时中断,再次运行可以继续训练

import tensorflow as tftrain_num = tf.Variable(0)train_num = tf.assign(train_num, train_num+1, name='train_num')saver = tf.train.Saver() # 需要放在函数外面def run():    with tf.Session() as sess:        try:            saver2 = tf.train.import_meta_graph('model2/my-model.meta')            saver2.restore(sess, tf.train.latest_checkpoint("model2/"))            print("加载模型...")        except Exception:            print("加载模型出错!")            print("重新开始训练模型...")            sess.run(tf.global_variables_initializer())        for i in range(100):            temp = sess.run(train_num)            print("第", temp , "次训练")            saver.save(sess, "model2/my-model")            #saver.save(sess, "model2/my-model", global_step=i)if __name__ == "__main__":    run()

9 激活函数

1) sigmoid函数

tf.sigmoid()

在这里插入图片描述

2) Tanh函数

tf.tanh()

在这里插入图片描述

3) ReLU函数

tf.nn.relu()

在这里插入图片描述

4) Softplus函数

tf.nn.softplus()

在这里插入图片描述

5) Softmax函数

tf.nn.softmax()

10 TensorBoard

1) 函数

#记录标量数据tf.summary.scalar('xxx_name', xxx)#记录直方图数据tf.summary.histogram('xxx_name', xxx)#记录文本输入tf.summary.text('xxx_name', xxx)#记录图像数据tf.summary.image('xxx_name', xxx)#记录音频数据tf.summary.audio('xxx_name', xxx)#将上面所有的summary信息合并tf.summary.merge_all()#将信息保存到文件中,在终端执行: tensorboard --logdir 路径tf.summary.FileWriter('保存的路径', sess.graph)

2) 参考代码

import tensorflow as tfimport timetrain_num = tf.Variable(0)tf.summary.scalar('name', train_num) # 记录该标量数据add = tf.assign(train_num, train_num+1, name='add_option') # 让train_num加1with tf.Session() as sess:   	merge_all = tf.summary.merge_all() # 将所有的summary信息合并   	writer = tf.summary.FileWriter('./logs/test', sess.graph) # 将summary和图保存到文件中   	sess.run(tf.global_variables_initializer())   	i = 1   	while i == 1:   		i += 1   		merge_result ,_ =sess.run([merge_all, add]) # 去计算merge_all从而合并信息   		writer.add_summary(merge_result, i) # 将新的信息添加到summary中   		time.sleep(2) # 延时便于观测   	writer.close()

转载地址:http://fcbi.baihongyu.com/

你可能感兴趣的文章