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、初始化

说明:

变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。

 

方法:
  1. 初始化所有:tf.global_variables_initializer()
  2. 初始化单个变量: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
)
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 np

const=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

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