Udacity深度学习(google)笔记(3)——CNN 卷积模型

  • 深度学习与计算机视觉系列(8)_神经网络训练与注意点
  • 深度学习之四大经典CNN技术浅析(熟悉一下经典的CNN以及它们在tensorflow或keras中的预训练模型,在此基础上可以通过迁移学习或者微调来完成一些自己的深度学习任务)
  • AlexNet
    VGGNet
    Google Inception Net
    ResNet

  • 合并颜色
  • 统计不变性: translation invariance,weight sharing (cnn, embeddings, rnn)
  • 在脑海中形成卷积核的图像: feature map, patch/kernel, stride, valid padding, same padding,
  • BP的推导
  • pooling: max的优缺点,  LENET-5 (1998), AlexNet (2012); average, 
  • 1x1: 为什么需要这个
  • inception
  • 任务 4: 卷积模型设计并训练一个卷积神经网络
  • GPU计算怎么做?
  • 关键的代码就是这一点(搭建CNN的网络结构,但是具体的运算过程还需要仔细看):
  •    # Input data.
      tf_train_dataset = tf.placeholder(
        tf.float32, shape=(batch_size, image_size, image_size, num_channels) #111 训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数
  •    layer1_weights = tf.Variable(tf.truncated_normal(
          [patch_size, patch_size, num_channels, depth], stddev=0.1)) #111 卷积核的高度,卷积核的宽度,图像通道数,depth=16
      layer1_biases = tf.Variable(tf.zeros([depth]))
      layer2_weights = tf.Variable(tf.truncated_normal(
          [patch_size, patch_size, depth, depth], stddev=0.1))
      layer2_biases = tf.Variable(tf.constant(1.0, shape=[depth])) #222 bias都写的是1维的,参见官方文档
      layer3_weights = tf.Variable(tf.truncated_normal(
          [image_size // 4 * image_size // 4 * depth, num_hidden], stddev=0.1)) #222 全连接层前面的连接,stride=2导致高、宽缩小
      layer3_biases = tf.Variable(tf.constant(1.0, shape=[num_hidden]))
      layer4_weights = tf.Variable(tf.truncated_normal(
          [num_hidden, num_labels], stddev=0.1))   #333 全连接层后面的连接
      layer4_biases = tf.Variable(tf.constant(1.0, shape=[num_labels]))
      
      # Model.
      def model(data):
        conv = tf.nn.conv2d(data, layer1_weights, [1, 2, 2, 1], padding='SAME') #111 注意这四个数字与前面 input data 对应,表示各维度上的stride
        hidden = tf.nn.relu(conv + layer1_biases)
        conv = tf.nn.conv2d(hidden, layer2_weights, [1, 2, 2, 1], padding='SAME')
        hidden = tf.nn.relu(conv + layer2_biases)
        shape = hidden.get_shape().as_list() #如果在这里print shape[0],运行会得到16,10000,10000,但是run的时候不会有输出,可以看tf底层设计
        reshape = tf.reshape(hidden, [shape[0], shape[1] * shape[2] * shape[3]])  #222 shape[1] * shape[2] * shape[3], shape[0]是batch_size
        hidden = tf.nn.relu(tf.matmul(reshape, layer3_weights) + layer3_biases)
        return tf.matmul(hidden, layer4_weights) + layer4_biases
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值