Tensorflow数据读取有三种方式:
- Preloaded data: 预加载数据 Feeding:
- Python产生数据,再把数据喂给后端。 Reading from
- file: 从文件中直接读取
具体可以参考:极客学院的数据读取
这里介绍下:
TF生成数据的方式
正常情况下,使用tf.initialize_all_variables()初始化变量,在完全构建好模型并加载之后才运行这个操作。生成数据的主要方法如下
1)如果需要利用已经初始化的参数给其他变量赋值
TF的变量有个initialized_value()属性,就是初始化的值,使用方法如下:
# 原始的变量
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
# 创造相同内容的变量
w2 = tf.Variable(weights.initialized_value(), name="w2")
# 也可以直接乘以比例
w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")
tf.set_random_seed(seed)
设置产生随机数的种子。
- 生成tensor:
①tf.zeros(shape, dtype=tf.float32, name=None)
#tf.zeros([2, 3], int32) ==> [[0, 0, 0], [0, 0, 0]]
②tf.ones(shape, dtype=tf.float32, name=None)
#tf.ones([2, 3], int32) ==> [[1, 1, 1], [1, 1, 1]]
③tf.zeros_like(tensor, dtype=None, name=None)
新建一个与给定的tensor类型大小一致的tensor,其所有元素为1。# 'tensor' is [[1, 2, 3], [4, 5, 6]]
tf.ones_like(tensor) ==> [[1, 1, 1], [1, 1, 1]]
④tf.constant(value, dtype=None, shape=None, name='Const')创建一个常量tensor,先给出value,可以设定其shape
# Constant **1-D** Tensor populated with value list.
tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7]
# Constant **2-D** tensor populated with scalar value -1.
tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]
⑤tf.fill(dims, value, name=None)
创建一个形状大小为dim的tensor,其初始值为value
# Output tensor has shape [2, 3].
fill([2, 3], 9) ==> [[9, 9, 9],[9, 9, 9]]
⑥tf.ones_like(tensor, dtype=None, name=None)
2.生成序列
⑦tf.range(start, limit, delta=1, name='range')
返回一个tensor等差数列,该tensor中的数值在start到limit之间,不包括limit,delta是等差数列的差值。start,limit和delta都是int32类型。
# 'start' is 3
# 'limit' is 18
# 'delta' is 3
tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15]
# 'limit' is 5 start is 0
tf.range(start, limit) ==> [0, 1, 2, 3, 4]
⑧tf.linspace(start, stop, num, name=None)返回一个tensor,该tensor中的数值在start到stop区间之间取等差数列(包含start和stop),如果num>1则差值为(stop-start)/(num-1),以保证最后一个元素的值为stop。其中,start和stop必须为tf.float32或tf.float64。num的类型为int。
tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0 11.0 12.0]
3.生成随机数
⑨tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
返回一个tensor其中的元素的值服从正态分布。
seed: A Python integer. Used to create a random seed for the distribution.See set_random_seed for behavior。
⑩tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
返回一个tensor其中的元素服从截断正态分布
理解:shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布,均值和标准差自己设定。这是一个截断的产生正太分布的函数,就是说产生正太分布的值如果与均值的差值大于两倍的标准差,那就重新生成。和一般的正太分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。
⑩①tf.random_uniform(shape, minval=0.0, maxval=1.0, dtype=tf.float32, seed=None, name=None)
返回一个形状为shape的tensor,其中的元素服从minval和maxval之间的均匀分布。
⑩②tf.random_shuffle(value, seed=None, name=None)
对value(是一个tensor)的第一维进行随机化。
[[1,2], [[2,3],
[2,3], ==> [1,2],
[3,4]] [3,4]]
参数说明:参考官网:链接
shape: 用于表示维度,通常为一个int32类型数组,或者一个一维(1-D)的tf.int32数字.注意不能直接使用数字
dtype: 所要创建的tensor对象的数据类型
tensor: tensor对象
mean:数据类型为dtype的张量值或Python值。是正态分布的均值。
stddev:数据类型为dtype的张量值或Python值。是正态分布的标准差
seed:一个Python整数。是随机种子。
name: 操作的名称(可选)
操作案例:这里之选择一个操作,用with开与关
data1=tf.zeros([2, 3],tf.int32)
with tf.Session() as sess1:
print(sess1.run(data1))
receive:
[[0 0 0]
[0 0 0]]