1.tf.set_random_seed(5)
解释:
设置图形级随机seed.
可以从两个seed中获得依赖随机seed的操作:图形级seed和操作级seed.本节是介绍如何设置图形级别的seed.
它与操作级别seed的交互如下:
- 如果既没有设置图层级也没有设置操作级别的seed:则使用随机seed进行该操作.
- 如果设置了图形级seed,但操作seed没有设置:系统确定性地选择与图形级seed结合的操作seed,以便获得唯一的随机序列.
- 如果未设置图形级seed,但设置了操作seed:使用默认的图层seed和指定的操作seed来确定随机序列.
- 如果图层级seed和操作seed都被设置:则两个seed将一起用于确定随机序列.
图形级session 和操作及session的一句话总结:
图形级session对于整个graph都起作用的
操作级session设置后只对某个操作符号有用,如 a = tf.random_uniform([1], seed=1)
#图形级session
tf.set_random_seed(1234)
a = tf.random_uniform([1])
b = tf.random_normal([1])
# Repeatedly running this block with the same graph will generate the same
# sequences of 'a' and 'b'.
print("Session 1")
with tf.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
print("Session 2")
with tf.Session() as sess2:
print(sess2.run(a)) # generates 'A1'
print(sess2.run(a)) # generates 'A2'
print(sess2.run(b)) # generates 'B1'
print(sess2.run(b)) # generates 'B2'
#操作级session
a = tf.random_uniform([1], seed=1)
b = tf.random_normal([1])
# Repeatedly running this block with the same graph will generate the same
# sequence of values for 'a', but different sequences of values for 'b'.
print("Session 1")
with tf.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'
print(sess1.run(b)) # generates 'B1'
print(sess1.run(b)) # generates 'B2'
print("Session 2")
with tf.Session() as sess2:
print(sess2.run(a)) # generates 'A1'
print(sess2.run(a)) # generates 'A2'
print(sess2.run(b)) # generates 'B3'
print(sess2.run(b)) # generates 'B4'
参见:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-fqc42jvo.html
2. tf.expand_dims()
expand_dims(
input,
axis=None,
name=None,
dim=None
)
说明:给定一个张量 input,此操作在 input 的形状的维度索引轴中插入1个维度.该维度的索引轴从零开始;如果为该坐标轴指定负数,它将从末尾向后计数.
3.tf.squeeze()
squeeze(
input,
axis=None,
name=None,
squeeze_dims=None
)
从张量形状中移除大小为1的维度.
给定一个张量 input,返回一个张量(删除了原张量中所有维度为1 的维度),如果不想全部删除,则可以指定axis
4.tf.pack()
目前替换为 tf.stack()
tf.stack(
values,
axis=0,
name='stack'
)
将秩为 R 的张量列表堆叠成一个秩为 (R+1) 的张量.
将 values 中的张量列表打包成一个张量,该张量比 values 中的每个张量都高一个秩,通过沿 axis 维度打包.给定一个形状为(A, B, C)的张量的长度 N 的列表;
如果 axis == 0,那么 output 张量将具有形状(N, A, B, C).如果 axis == 1,那么 output 张量将具有形状(A, N, B, C).
5.cnn中的tensor的维度问题
tf.nn.conv2d()
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None
)
参数:
input:一个Tensor,必须是下列类型之一:half,bfloat16,float32,float64;一个4-D张量,维度顺序根据data_format值进行解释,详见下文.
filter:一个Tensor,必须与input相同,形状为[filter_height, filter_width, in_channels, out_channels]的4-D张量.
strides:ints列表,长度为4的1-D张量,input的每个维度的滑动窗口的步幅;维度顺序由data_format值确定,详见下文.
padding:string,可以是:"SAME", "VALID",要使用的填充算法的类型.
use_cudnn_on_gpu:bool,默认为True.
data_format:string,可以是"NHWC", "NCHW",默认为"NHWC";指定输入和输出数据的数据格式;使用默认格式“NHWC”,数据按以下顺序存储:[batch, height, width, channels];或者,格式可以是“NCHW”,数据存储顺序为:[batch, channels, height, width].
dilations:ints的可选列表,默认为[1, 1, 1, 1],长度为4的1-D张量,input的每个维度的扩张系数;如果设置为k> 1,则该维度上的每个滤镜元素之间将有k-1个跳过的单元格;维度顺序由data_format值确定,详见上文;批次和深度尺寸的扩张必须为1.
name:操作的名称(可选).
返回:
一个Tensor,与input具有相同的类型.
计算给定的4-D input和filter张量的2-D卷积.
给定形状为[batch, in_height, in_width, in_channels]的输入张量和形状为[filter_height, filter_width, in_channels, out_channels]的滤波器/内核张量 做卷积操作
对于shape的格式,python中四维矩阵是[batch, in_channels,in_height, in_width],所以将python的4维矩阵转换成tensorflow的4维矩阵,需要做转置操作
6.tf.nn.max_pool() [目的是降维]
tf.nn.max_pool(
value,
ksize,
strides,
padding,
data_format='NHWC',
name=None
)
value:由data_format指定格式的4-D Tensor. batch_size, height_1, width_1, channels]
ksize:具有4个元素的1-D整数Tensor.输入张量的每个维度的窗口大小. [1, height_2, width_2, 1]
strides:具有4个元素的1-D整数Tensor.输入张量的每个维度的滑动窗口的步幅. [1, stride_height, stride_width, 1]
padding:一个字符串,可以是'VALID'或'SAME'.填充算法.
data_format:一个字符串.支持'NHWC','NCHW'和'NCHW_VECT_C'.
name:操作的可选名称.
返回的维度:
[batch_size, height_1 - height_2,width_1 - width_2, channels]
7.tf.ConfigProto() 的使用