tensorflow

原创文章点击这里

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) #创建变量n
tf.assign(a, n) #给变量n赋值为n,变量只能通过该方法完成赋值
tf.constant(n) #创建常量n
tf.assign(n1, n2) #给变量赋值,n1=n2
tf.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 tf

train_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 tf
import time

train_num = tf.Variable(0)
tf.summary.scalar('name', train_num) # 记录该标量数据
add = tf.assign(train_num, train_num+1, name='add_option') # 让train_num加1

with 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()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值