本篇介绍在神经网络中的常见函数 和编程层面的常见问题
一、placeholder和variable的区别
在tf中除了数据常量和数据变量之外,还存着一种特殊的数据类型——占位符。由于tf的所有运算都是基于session上的一个graph,因此在将一个一个数据流入graph这个数据在编程过程中是不存在的需要一个占位符来代替数据的位置。因此通常使用字典的形式来对placeholder赋值。
而variable会一直保存在这个图中,赋予每个节点具体的意义,同时也会构成整个图的拓扑结构,同时变量会一直在图中存在。
二、tf.truncated_normal
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
shape: 一维的张量,也是输出的张量。
mean: 正态分布的均值。
stddev: 正态分布的标准差。
dtype: 输出的类型。
seed: 一个整数,当设置之后,每次生成的随机数都一样。
name: 操作的名字。
从截断的正态分布中输出随机值。 shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布,均值和标准差自己设定。这是一个截断的产生正态分布的函数,就是说产生正态分布的值如果与均值的差值大于两倍的标准差,那就重新生成。和一般的正态分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。
三、tf.nn.conv2d
tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
参数:
input : 输入的要做卷积的图片,要求为一个张量,shape为 [ batch, in_height, in_weight, in_channel ],其中batch为图片的数量,in_height 为图片高度,in_weight 为图片宽度,in_channel 为图片的通道数,灰度图该值为1,彩色图为3。(也可以用其它值,但是具体含义不是很理解)
filter: 卷积核,要求也是一个张量,shape为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight 为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel 是卷积核数量。
strides: 卷积时在图像每一维的步长,这是一个一维的向量,[ 1, strides, strides, 1],第一位和最后一位固定必须是1
padding: string类型,值为“SAME” 和 “VALID”,表示的是卷积的形式,是否考虑边界。"SAME"是考虑边界,不足的时候用0去填充周围,"VALID"则不考虑
use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true
四、tf.reduce_sum 和 tf.reduce_mean
主要用于数据的降维度 因为神经网络最终产生的往往是一个(n * n * n)的矩阵 但是最终的结果往往需要的是一个分类一个一维的矩阵 因此需要去降维度 来生成最后的结果
reduce_sum (
input_tensor ,
axis = None ,
keep_dims = False ,
name = None ,
reduction_indices = None
)
input_tensor:要减少的张量.应该有数字类型。
axis:要减小的尺寸.如果为None(默认),则缩小所有尺寸.必须在范围[-rank(input_tensor), rank(input_tensor))内。
keep_dims:如果为true,则保留长度为1的缩小尺寸。
name:操作的名称(可选)。
reduction_indices:axis的废弃的名称。
返回值及注意:
此函数计算一个张量的各个维度上元素的总和。
函数中的input_tensor是按照axis中已经给定的维度来减少的;除非 keep_dims 是true,否则张量的秩将在axis的每个条目中减少1;如果keep_dims为true,则减小的维度将保留为长度1。
如果axis没有条目,则缩小所有维度,并返回具有单个元素的张量.
import tensorflow as tf
import numpy as np
x = tf.constant([[1.,1.],[2.,2.]])
y = tf.reduce_mean(x,0) # y = tf.reduce_mean(x,1)
with tf.Session() as sess:
x = sess.run(y)
print(y.eval())
tf.reduce_mean()函数是计算平均值的
七、tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(loss)
train.GradientDescentOptimizer()使用随机梯度下降算法,使参数沿着 梯度的反方向,即总损失减小的方向移动,实现更新参数
其中,?(?)为损失函数,?为参数,?为学习率。
八、tf.cast
tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。
tf.cast(x, dtype, name=None)
第一个参数 x: 待转换的数据(张量)
第二个参数 dtype: 目标数据类型
第三个参数 name: 可选参数,定义操作的名称
最后需要注意的是可以看到在tf中每次卷积 池化 等等的操作都是有name的 这个name其实还是至关重要的 因为在模型的恢复中需要用这些name去找对应的变量 和操作的参数