Task4 convolutions

这次的任务是完成卷积神经网络
作业中已经给出了一个卷积神经网络,但是只有卷积层,没有池化层。不过learning_rate很小,只有0.05

第一个问题 增加池化层

  def model(data):
    conv = tf.nn.conv2d(data, layer1_weights, [1, 1, 1, 1], padding='SAME')
    pool = tf.nn.max_pool(conv, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
    hidden = tf.nn.relu(pool + layer1_biases)
    conv = tf.nn.conv2d(hidden, layer2_weights, [1, 1, 1, 1], padding='SAME')
    pool = tf.nn.max_pool(conv, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
    hidden = tf.nn.relu(pool + layer2_biases)
    shape = hidden.get_shape().as_list()

    reshape = tf.reshape(hidden, [shape[0], shape[1] * shape[2] * shape[3]])
    hidden = tf.nn.relu(tf.matmul(reshape, layer3_weights) + layer3_biases)
    return tf.matmul(hidden, layer4_weights) + layer4_biases

首先是卷积层,将原先的卷积层的步长改为1,padding仍为‘SAME’类型,此时,输出为16*28*28*16
之后添加一个池化层,ksize是filter的大小,类似与上面的参数layer1_weight,输出为16*14*14*16
接着就是relu
后面的结构还是一样,最后输出为16*7*7*16
接着进行了reshape,将维度变成了16*784
进行全连接+relu+全连接
此时的准确率由90%提高到了90.7%,并且速度也很快

第二个问题 提高准确率

1用L2正则化
参数为0.01时,准确率达到了91.2%

2.drop out
我使用了之后准确率依然下降了。TensorFlow官网上也说了

For this small convolutional network, performance is actually nearly identical with and without dropout. Dropout is often very effective at reducing overfitting, but it is most useful when training very large neural networks

不过,改天还是需要好好学习下drop out

3.学习速率
增加decay之后,有了提高

Minibatch loss at step 2960: 1.397761
Minibatch accuracy: 68.8%
Validation accuracy: 85.5%
Test accuracy: 92.8%

Minibatch loss at step 4960: 0.413734
Validation accuracy: 87.2%
Test accuracy: 93.0%

之后,想起来上次作业用的初始化方法,也在这里试了一下,但没什么效果

之后又把filter大小改为了3*3试下,还是没效果

  1. 优化方法
    具体见https://zhuanlan.zhihu.com/p/25703402

另外,可以参考Le-Net的结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值