【发布时间】:2020-08-09 00:26:49
【问题描述】:
问题:如何设置 CNN 以使形状匹配?这是我第一次与一个人合作,因为我的背景是 NLP,我遇到了形状不匹配的错误。
我尝试过的:
- 我已尝试编辑过滤器和 kernel_size 变量。
- 我认为 kernel_size 是正确的。我尝试将过滤器变量设置为 tf.constant(kernel).shape[-1] 和 tf.constant(kernel).shape[-2]。在我看来,没有任何其他选择,所以我很困惑,尽管我认为这就是问题所在。
输入权重矩阵:
- http://www.robots.ox.ac.uk/~vgg/software/vgg_face/
- 下载 vgg_face_matconvnet.tar.gz 并压缩。
- vgg_face_matconvnet/Data/vgg_face.mat
代码:
# read layer info
model = tf.keras.Sequential()
model.add(tf.keras.Input([224, 224, 3]))
for layer in layers:
layer_type = layer[0][0][0][0]
name = layer[0][0][1][0]
if layer_type == 'conv':
print(layer_type)
print(name)
weights = layer[0][0][2][0]
stride = layer[0][0][3][0]
# pad = layer[0][0][4][0]
learningRate = layer[0][0][5][0]
weightDecay = layer[0][0][6][0]
momentum = layer[0][0][7][0]
kernel, bias = weights
# kernel = np.transpose(kernel, (1, 0, 2, 3))
bias = np.squeeze(bias).reshape(-1)
filters = tf.constant(kernel).shape[-1]
kernel_size = (3,3) #[np.shape(kernel)[-3], np.shape(kernel)[-2]]
bias_initializer = tf.constant_initializer(bias)
strides=[1, stride[0]]
if name[:2] == 'fc':
padding = 'VALID'
if name == 'fc6':
model.add(tf.keras.layers.Flatten())
dense_layer = tf.keras.layers.Dense(filters, kernel_initializer=tf.constant_initializer(kernel))
if name == 'fc7':
dense_layer = tf.keras.layers.Dense(filters, kernel_initializer=tf.constant_initializer(kernel))
model.add(dense_layer)
else:
padding = 'SAME'
conv2d_layer = tf.keras.layers.Conv2D(filters, kernel_size, strides=strides, kernel_initializer=tf.constant_initializer(kernel))
model.add(conv2d_layer)
print(f"{name} stride: {stride} kernel size: {np.shape(kernel)}")
elif layer_type == 'relu':
model.add(tf.keras.layers.ReLU(max_value=None, negative_slope=0, threshold=0))
print(name)
elif layer_type == 'pool':
pool = layer[0][0][3][0]
stride = layer[0][0][4][0]
model.add(tf.keras.layers.MaxPool2D(pool_size=pool, strides=(stride[0],stride[0]), padding='SAME', data_format="channels_last"))
print(f"{name} stride: {stride}")
elif layer_type == 'softmax':
model.add(tf.keras.layers.Softmax())
print(name)
错误信息:
TypeError: Eager execution of tf.constant with unsupported shape (value has 102760448 elements, shape is (2048, 4096) with 8388608 elements).
【问题讨论】:
-
你在 Google Colab 上运行代码吗?
-
@HaardikDharma 是的
-
@pr338 我的回答解决了你的问题吗?
标签: python tensorflow conv-neural-network