如果你完全不想改动v1版本的代码,怎么办,这么操作即可:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
1、tensorflow.placeholder()
placeholder是占位符的意思,在tensorflow中类似于函数参数,在执行的时候再赋具体的值。
参数含义:
• dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
• shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3], [None, 3]表示列是3,行不定
• name:名称。
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:[7.],input2:[2.0]}))
2、tf.Variable 定义变量
tensorflow采用C实现,variable就是C语言的变量,tensorflow规定变量必须初始化其实是减少变量的不确定性,在C语言里面,变量可以不初始化,但为初始化的变量的值不可预估
a=tf.Variable([0,0,0]) //这其实就相当于C的变量的定义,int a[3];
b=tf.assign(a,[1,2,3]) //这其实就是变量的赋值,a[3]={1,2,3};
3、tf.global_variables_initializer() 初始化所有变量
• 添加节点用于初始化全局变量(GraphKeys.GLOBAL_VARIABLES)。返回一个初始化所有全局变量的操作(Op)。在你构建完整个模型并在会话中加载模型后,运行这个节点。
• 必须要使用global_variables_initializer的场合 # 含有tf.Variable的环境下,因为tf中建立的变量是没有初始化的,也就是在debug时还不是一个tensor量,而是一个Variable变量类型
4、tf.random_uniform 均匀分布随机矩阵
参数:
• shape:一维整数张量或 Python 数组.输出张量的形状.
• minval:dtype 类型的 0-D 张量或 Python 值;生成的随机值范围的下限;默认为0.
• maxval:dtype 类型的 0-D 张量或 Python 值.要生成的随机值范围的上限.如果 dtype 是浮点,则默认为1 .
• dtype:输出的类型:float16、float32、float64、int32、orint64.
• seed:一个 Python 整数.用于为分布创建一个随机种子.查看 tf.set_random_seed 行为.
• name:操作的名称(可选).
例:tf.random_uniform( (6, 6), minval=low,maxval=high,dtype=tf.float32) 返回6*6的矩阵,产生于low和high之间,产生的值是均匀分布的。
5、tf.random_normal() 用于从“服从指定正态分布的序列”中随机取出指定个数的值。
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
参数:
• shape: 输出张量的形状,必选
• mean: 正态分布的均值,默认为0
• stddev: 正态分布的标准差,默认为1.0
• dtype: 输出的类型,默认为tf.float32
• seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
• name: 操作的名称
6、tf.constant(value,dtype=None,shape=None,name=’Const’) 创建一个常量
7、tf.assign(state,new_value)赋值
8、tf.matmul() 和tf.multiply()
• 1.tf.multiply()两个矩阵中对应元素各自相乘 (两个相乘的数必须有相同的数据类型)
• 2.tf.matmul()将矩阵a乘以矩阵b,生成a * b。
格式: tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None)
参数:
○ a: 一个类型为 float16, float32, float64, int32, complex64, complex128 且张量秩 > 1 的张量。
○ b: 一个类型跟张量a相同的张量。
○ transpose_a: 如果为真, a则在进行乘法计算前进行转置。
○ transpose_b: 如果为真, b则在进行乘法计算前进行转置。
○ adjoint_a: 如果为真, a则在进行乘法计算前进行共轭和转置。
○ adjoint_b: 如果为真, b则在进行乘法计算前进行共轭和转置。
○ a_is_sparse: 如果为真, a会被处理为稀疏矩阵。
○ b_is_sparse: 如果为真, b会被处理为稀疏矩阵。
○ name: 操作的名字(可选参数)
9、tf.cast
cast(x, dtype, name=None)
• 第一个参数 x: 待转换的数据(张量)
• 第二个参数 dtype: 目标数据类型
第三个参数 name: 可选参数,定义操作的名称
10、Session两种
Import tensorflow as tf
Import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
matrix1=tf.constant([[3,3]])
matrix2=tf.constant([[2],
[2]])
product=tf.matmul(matrix1,matrix2)#matrix multiply np.dot(m1,m2)
#method1
sess=tf.Session()
result=sess.run(product)
print(result)
sess.close()
#method2
With tf.Session() as sess:
result2=sess.run(product)
print(result2)
11、
Import tensorflow as tf
Import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
state=tf.Variable(0,name='counter')
#print(state.name)
one=tf.constant(1)
new_value=tf.add(state,one)
update=tf.assign(state,new_value)
init=tf.global_variables_initializer()
With tf.Session() as sess:
sess.run(init)
For _ in range(3):
sess.run(update)
print(sess.run(state))
#输出结果 1 2 3因为把update、new_value看做行为
12、可视化_1 tensorboard
-
命名
With tf.name_scope(‘layer’):
With tf.name_scope(‘weights’):
Weights=tf.Variable(tf.random_normal([in_size,out_size]),name=‘W’) -
加载文件
sess=tf.Session()
writer=tf.summary.FileWriter(“logs/”,sess.graph) -
命令行运行(logs父文件夹)
D:\pycharmwork\tensorflow_study>tensorboard --logdir=logs
浏览器 http://localhost:6006/ Grapghs文件夹
13、可视化_2 tensorboard
-
命名
With tf.name_scope(‘layer’):
With tf.name_scope(‘weights’):
Weights=tf.Variable(tf.random_normal([in_size,out_size]),name=‘W’) -
在需要查看的变量后加
tf.summary.histogram(layer_name+’/weights’,Weights) -
loss需要加
tf.summary.scalar(‘loss’,loss) -
将各数字聚集起来
merged=tf.summary.merge_all()
writer=tf.summary.FileWriter(“logs/”,sess.graph) -
训练演示
For i inrange(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i % 50==0:
result=sess.run(merged,
feed_dict={xs:x_data,ys:y_data})
writer.add_summary(result,i)
14、tf.nn.dropout 消除过拟合
- drop_out的原理为:通过将某神经元的输出设置为0,达到使其失活的效果,消除网络中过分依赖某个神经元
- 过拟合一般出现在网络过分复杂,且训练数据较少的情况,数据较少而未知参数太多,则较易产生过拟合
- 核心代码:layer1=tf.nn.dropout(layer1,drop_out)
1)kepp_prob = placrholder()
2)sess.run(feed_dict={ys:y_train,keep_prob:0.6})
3)在Wx_plus_b定义后加Wx_plus_b = tf.nn.dropout(Wx_plus_b,keep_prob)
15、Saver
- Save #要定义dtype
saver=tf.train.Saver()
With tf.Session() as sess:
sess.run(init)
save_path=saver.save(sess,"my_net/save_net.ckpt")
- Restore
tf.reset_default_graph()
#not need init step
saver=tf.train.Saver()
With tf.Session() as sess:
saver.restore(sess,"my_net/save_net.ckpt")
print("weights:",sess.run(W))
print("biases",sess.run(b))