Variable变量
1、Variable变量的创建
说明:
Variable是tensorflow中的一个类,需要实例化,变量根据传入的初始值的shape决定变量的shape,如传入2*2的矩阵,则变量的shape为2*2。
Variable的构造函数:
tf.Variable.__init__(initial_value,trainable=True, collections=None, dtype=None, validate_shape=True, name=None)
initial_value:初始值,一个tensor或者是可以转化成tensor的python对象,如np.arange(10)
- trainable:是否可训练,如果是,则可以用优化器optimizer来训练
- name:变量名,可以用于在tensorboard中显示名字等,tensorboard是可视化工具。
- dtype:用来设置数据类型,如tf.float32、tf.float64
2、初始化
说明:
变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。
方法:
- 初始化所有:tf.global_variables_initializer()
- 初始化单个变量:
Variable.initialized_value()
3、代码示例:
import tensorflow as tf
import numpy as np#创建shape=1*1的变量
v1=tf.Variable(1)#创建shape=2*2的变量,并命名
v2=tf.Variable([[1,2],[3,4]],name='v2')#用numpy数组创建变量,设置数据类型为tf.float32
v3=tf.Variable(np.arange(0,9).reshape(3,3),dtype=tf.float32)#用tensoflow的随机tensor创建变量
v4=tf.Variable(tf.random_normal(shape=[3,3],mean=0,stddev=1))#用另一个变量的初始值*2来创建,这里别调用的变量传入要初始化
v5 = tf.Variable(v4.initialized_value()*2, name="w_twice")#创建初始化节点
init=tf.global_variables_initializer()#创建Saver保存数据
saver = tf.train.Saver()# #保存单个变量,用字典的形式传入数据{'储存名':'变量名'},对变量v2进行保存
# saver = tf.train.Saver({'save_v2':'v2'})
with tf.Session() as sess:sess.run(init)print('v1:\n',sess.run(v1))print('v2:\n', sess.run(v2))print('v3:\n', sess.run(v3))print('v4:\n', sess.run(v4))print('v5:\n', sess.run(v5))
Constant常量
说明:value与shape都固定的tensor
1、创建常量
用函数tf.constant()返回,函数的形式如下
:
tf.constant(
value,
dtype=None,
shape=None,
name='Const',
verify_shape=False
)
参数说明:
- value: 符合tf中定义的数据类型的常数值或者常数列表;
- dtype:数据类型,可选;
- shape:常量的形状,可选;
- name:常量的名字,可选;
- verify_shape:常量的形状是否可以被更改,默认不可更改
2、代码示例
import tensorflow as tf
import numpy as npconst=tf.constant(np.arange(1,2),dtype=tf.float32)with tf.Session() as sess:print(sess.run(const))
Placeholder占位符
说明:作用是用来占位的,当要传入的数据不确定的时候,可以用占位符,可以使数据的使用更灵活,但是在执行Session.run()的时候如果有placeholder,必须用fetch字典给placeholder传入数据。
1、创建占位符
用函数tf.
placeholder
()返回,函数的形式如下:
tf.placeholder(
dtype,
shape=None,
name=None
)
参数说明:
- dtype:数据类型
- shape:数据形状
- name:名称
2、代码示例
import tensorflow as tf
import numpy as np
import random#创建两个2维占位符[None,1]表示不确定行数1列的数据
p=tf.placeholder(tf.float32,[None,1])#创建10*1的随机数组
arr=np.random.randn(10,1)#让两个占位符进行加法运算
add_=tf.add(p,1)#创建会话
with tf.Session() as sess:for i in range(3):#传入i+1行1列的数据p_in=arr[:i+1]print('传入的数据为:\n',p_in)#执行加法运算,由于有placeholder,所以要对feed_dict传入字典{占位符:传入数据}print('执行加法结果为:\n',sess.run(add_,feed_dict={p:p_in}))