我正在尝试将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。
在您的尝试 #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)
归档时间: |
|
查看次数: |
1338 次 |
最近记录: |