just do it and waiting

Tensorflow

2020-12-09


使用GPU

为了避免占用全部GPU,需要加上

import os
os.environ['CUDA_DEVICES_ORDER'] = 'PCI_BUS_ID'
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
config = tf.ConfigProto()
#config.gpu_options.per_process_gpu_memory_fraction = 0.9
config.gpu_options.allow_growth = True

tf.truncated_normal_initializer

生成截断正态分布的初始化器

tf.get_variable()

获取一个变量或者创建一个新的变量

tf.nn.conv2d()

2维卷积函数,列举主要参数tf.nn.conv2d(input, filter=None, strides=None, paddig=None, data_format=‘NHWC’)。

一般来说,input的各个维度为[batch, in_height, in_width, in_channels],filter的各个维度为 [filter_height, filter_width, in_channels, out_channels]

初始化变量

变量需要初始化,初始化方法有单独初始化和全局初始化。

单独初始化

v1 = tf.Variable(tf.random_normal([2, 3], stddev=2))
v2 = tf.Variable(tf.random_normal([2, 3], stddev=1))

sess = tf.Session()
sess.run(v1.initializer)
sess.run(v2.initializer)

全局初始化

v1 = tf.Variable(tf.random_normal([2, 3], stddev=2))
v2 = tf.Variable(tf.random_normal([2, 3], stddev=1))

sess = tf.Session()
init_op = tf.global_variable_initializer()
sess.run(init_op) # initialize all varibles

变量的维度一般不变,但也可以在运行时改变,例如

w1 = tf.Variable(tf.random_normal([2,3], stddev=1), name="w1")
w2 = tf.Variable(tf.random_normal([2,2], stddev=1), name="w2")

tf.assign(w1, w2)  # error, shapes not match
tf.assign(w1, w2, validate_shape=False) # normally eval

tf.reduce_mean(): 默认将所有数放到一维空间计算均值,可指定计算的维度。

梯度下降

softmax

tf.nn.softmax_cross_entropy_with_logits_v2(label=y_, logits=y) 用于计算对y经过softmax之后的结果与标签y_的交叉熵。也就是 $$ \sum\limits_{i=1}^ny_i\log\frac{e^{y_i}}{\sum_{j=1}^ne^{y_j}} $$ 对于只有一个正确答案的分类问题,也就是标签都形如$y_i=[\cdots,0,0,1,0,0,\cdots]$,可以用tf.nn.sparse_softmax_cross_entropy_with_logits来加快运算。