使用Tensor Flow运行多规模网络

时间:2016-01-17 23:03:18

标签: tensorflow

我想尝试使用cifar10代码中的tensorflow构建一个多规模的CNN。

根据我的理解,我应该获取第一个转换层的输出,并将其与第二个转换层的输出合并,以提供第一个完全连接的层。是对的吗?如果是的话,如何实际做到这一点?

我有几乎与cifar10相同的第一层,除了norm1和切换的pool1层

  # conv1
  with tf.variable_scope('conv1') as scope:
    kernel = _variable_with_weight_decay('weights', shape=[5, 5, 3, 64],
                                         stddev=1e-4, wd=0.0)
    conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')
    biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
    bias = tf.nn.bias_add(conv, biases)
    conv1 = tf.nn.relu(bias, name=scope.name)
    _activation_summary(conv1)

  # norm1
  norm1 = tf.nn.lrn(conv1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75,
                    name='norm1')
  # pool1
  pool1 = tf.nn.max_pool(norm1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1],
                         padding='SAME', name='pool1')


  # conv2
  with tf.variable_scope('conv2') as scope:
    kernel = _variable_with_weight_decay('weights', shape=[5, 5, 64, 64],
                                         stddev=1e-4, wd=0.0)
    conv = tf.nn.conv2d(norm1, kernel, [1, 1, 1, 1], padding='SAME')
    biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.1))
    bias = tf.nn.bias_add(conv, biases)
    conv2 = tf.nn.relu(bias, name=scope.name)
    _activation_summary(conv2)

  # norm2
  norm2 = tf.nn.lrn(conv2, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75,
                    name='norm2')
  # pool2
  pool2 = tf.nn.max_pool(norm2, ksize=[1, 3, 3, 1],
                         strides=[1, 2, 2, 1], padding='SAME', name='pool2')

然后我尝试使用concat将norm1层与pool2层合并。 这是我如何做到这一点

# local3
  with tf.variable_scope('local3') as scope:


    #concatenate tensors
    concat = tf.concat(2,[pool1,pool2])

    # Move everything into depth so we can perform a single matrix multiply.
    dim=1    
    for d in concat.get_shape()[1:].as_list():
      dim *= d
    reshape = tf.reshape(concat, [FLAGS.batch_size, dim])

    weights = _variable_with_weight_decay('weights', shape=[dim, 384],
                                          stddev=0.04, wd=0.004)
    biases = _variable_on_cpu('biases', [384], tf.constant_initializer(0.1))
    local3 = tf.nn.relu_layer(reshape, weights, biases, name=scope.name)
    _activation_summary(local3)

我甚至不确定这是正确的程序,因为在单一尺度的情况下,当我将初始损失设置为3时,损失现在为17。 这是常见的吗?

提前致谢。

0 个答案:

没有答案