第一部分讲解网络的构建,建立的方式和Tensorflow的官方中文教程的方式略微不同,由于网路结构小,各个隐层并未放入命名空间中,但逻辑顺序依然一样。
1.Alexnet
用一张图先展示一下CNN的经典网络结构Alexnet,可以看出它由五层卷积、三层池化和两层全连接组成,我会在网络中加入BN层。
2.TensorFlow运作方式
1.输入与占位符(Inputs and Placeholders) :placeholder_inputs()
函数将生成两个tf.placeholder
操作,定义传入图表中的shape参数,shape参数中包括batch_size
值
2.构建图表 :inference()
函数会尽可能地构建图表,做到返回包含了预测结果(output prediction)的Tensor。它接受图像占位符为输入,在此基础上借助ReLu(Rectified Linear Units)激活函数(也可替换成其他激活函数),构建一对完全连接层(layers),以及一个有着n个结点(n一般是你的分类数目)、指明了输出logtis模型的线性层。每一层都创建于一个唯一的tf.name_scope
之下,创建于该作用域之下的所有元素都将带有其前缀,使用如:
with tf.name_scope('hidden1') as scope:
weights = tf.Variable(
tf.truncated_normal([IMAGE_PIXELS, hidden1_units],
stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),
name='weights')
biases = tf.Variable(tf.zeros([hidden1_units]),
name='biases')
hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)
logits = tf.matmul(hidden2, weights) + biases
3.损失函数:如果你的标签是one-hot编码则可以省略这一步骤,如果不是,tensorflow也可以帮你转换成one-hot编码,例如,如果类标识符为“3”,那么该值就会被转换为: