如何将 CIFAR10 教程转换为 NCHW

Mar*_*onn 4 tensorflow

我正在尝试将Tensorflow CIFAR10教程从 NHWC转换为 NCHW,但不知道如何执行此操作。我只找到答案,比如这个,这是一个几行代码中没有它是如何工作以及在何处使用它的解释。以下是我使用这种方法进行的一些不成功的尝试:

def inference(images):

    with tf.variable_scope('conv1') as scope:
    kernel = _variable_with_weight_decay('weights',
                                     shape=[5, 5, 3, 64],
                                     stddev=5e-2,
                                     wd=0.0)

    # ****************************************************************** #

    ### Original
    conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')

    ### Attempt 1
    imgs = tf.transpose(images, [0, 3, 1, 2]) # NHWC -> NCHW
    conv = tf.nn.conv2d(imgs, kernel, [1, 1, 1, 1], padding='SAME')
    conv = tf.transpose(conv, [0, 2, 3, 1]) # NCHW -> NHWC

    ### Attempt 2
    kern = tf.transpose(kernel, [0, 3, 1, 2]) # NHWC -> NCHW
    conv = tf.nn.conv2d(images, kern, [1, 1, 1, 1], padding='SAME')
    conv = tf.transpose(conv, [0, 2, 3, 1]) # NCHW -> NHWC

    # ****************************************************************** #

    biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
    pre_activation = tf.nn.bias_add(conv, biases)
    conv1 = tf.nn.relu(pre_activation, name=scope.name)
    _activation_summary(conv1)
    
    ...
Run Code Online (Sandbox Code Playgroud)

哪个得到错误(分别):

ValueError:尺寸必须相等,但对于输入形状为 [64,3,24,24], [5,5,3,64] 的 'conv1/Conv2D'(操作:'Conv2D'),尺寸为 24 和 3。

ValueError:尺寸必须相等,但对于输入形状为 [64,24,24,3], [5,64,5,3] 的 'conv1/Conv2D'(操作:'Conv2D'),尺寸为 3 和 5。

有人可以提供一组我可以遵循的步骤来成功地将此示例转换为 NCHW。

And*_*ner 5

在您的尝试 #1 中,请尝试以下操作:

conv = tf.nn.conv2d(imgs, kernel, [1, 1, 1, 1], padding='SAME', data_format = 'NCHW')
Run Code Online (Sandbox Code Playgroud)

(即添加data_format = 'NCHW'到参数)

例如如下:

conv = tf.nn.conv2d(imgs, kernel, [1, 1, 1, 1], padding='SAME', data_format = 'NCHW')
Run Code Online (Sandbox Code Playgroud)