您的位置:首页 > 理论基础 > 计算机网络

卷积神经网络的参数维度(15)---《深度学习》

2017-10-19 20:41 232 查看
在写这篇博客之前,提一个奇奇怪怪的问题啦!

问题:如果我们将输入转化为(n,)而不是(n,1),那么此时的每一层的权重w或者偏置b的误差应该怎样求解呢?

为什么会有卷积神经网络单独列出来查看起参数维度呢?其实是因为在使用tf.nn.softmax()的时候遇到问题啦,如下:







我们可以清晰的看到当最后一层的维度是(10,1)的时候,结果和我们预期的结果不是一样的,当最后一层的维度是(10,)的时候时候结果符合预期。

而我们知道,当我们搭建一个NN的时候,最后一层就是(n,1),如果分析mnist网络的时候,则是(10,1),那么这样卷积神经网络的结构是怎样的呢?这就是我们的问题!

我们来看看在卷积神经网络中,每一层的输出和输入是什么,如下:





import tensorflow as tf

def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)

def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)

def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2_2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1], padding='SAME')

x1_shape=[60000,28,28,1]
w1_shape=[5,5,1,32]
b1_shape=[32]
x1=weight_variable(x1_shape)
w1=weight_variable(w1_shape)
b1=bias_variable(b1_shape)
x2=conv2d(x1,w1)+b1
h2=max_pool_2_2(x2)

print(h2.get_shape().as_list())

w2_shape=[5,5,32,64]
b2_shape=[64]
w2=weight_variable(w2_shape)
b2=bias_variable(b2_shape)
x3=conv2d(h2,w2)+b2
h3=max_pool_2_2(x3)
print(h3.get_shape().as_list())

h3_flat=tf.reshape(h3,[-1,7*7*64])
w1_fc_shape=[7*7*64,1024]
b1_fc_shape=[1024]

w1_fc=weight_variable(w1_fc_shape)
b1_fc=bias_variable(b1_fc_shape)
x1_fc=tf.matmul(h3_flat,w1_fc)+b1_fc
print(x1_fc.shape)

w2_fc_shape=[1024,10]
b2_fc_shape=[10]
w2_fc=weight_variable(w2_fc_shape)
b2_fc=bias_variable(b2_fc_shape)
x2_fc=tf.matmul(x1_fc,w2_fc)+b2_fc
print(x2_fc.shape)


运行结果:



我们假设全连接层的输入为(n,),下面我们来看看效果!













这儿更能看清CNN的输入结构为(n,),如下:



根据上面的代码我们可以看到CNN神经网络中,和神经网络的架构一致,只是将神经网络NN中的(n,1)转化为(n,)这样实现的,因此避免了softmax转化失败的问题!

哈哈,马上结束啦,那么上面提到的问题的答案呢,不写啦,为什么呢?因为。。。因为还没想清楚呢,哈哈哈,挖了一个大坑自己却绕过去了,需要大家一起来填坑了!

不会这么不负责啦,具体大家可以可以看看这两篇博客啦,一篇介绍卷积神经网络中的参数更新,另一篇介绍神经网络的搭建和参数设置!

tensorflow在mnist集上的使用示例(一)

卷积神经网络误差分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: