![](/img/trans.png)
[英]TensorFlow Recommenders - ValueError: Shape must be rank 2 but is rank 3
[英]Tensorflow: ValueError: Shape must be rank 4 but is rank 5
我是机器学习和 tensorflow 的新手。 我正在 keras 中使用功能 API 创建网络并出现错误。
ValueError: Shape must be rank 4 but is rank 5 for '{{node max_pooling2d_13/MaxPool}} = MaxPool[T=DT_FLOAT, data_format="NHWC", ksize=[1, 8, 8, 1], padding="SAME", strides=[1, 8, 8, 1]](max_pooling2d_13/MaxPool/input)' with input shapes: [1,?,64,64,8].
感谢您的帮助,我在这里有点迷茫。
我的输入是:
(64,64,3)
这是我的功能:
def convolutional_model(input_shape):
"""
Implements the forward propagation for the model:
CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> FLATTEN -> DENSE
"""
input_img = tf.keras.Input(shape=input_shape)
print(input_img)
## CONV2D: 8 filters 4x4, stride of 1, padding 'SAME'
# Z1 = None
## RELU
# A1 = None
## MAXPOOL: window 8x8, stride 8, padding 'SAME'
# P1 = None
## CONV2D: 16 filters 2x2, stride 1, padding 'SAME'
# Z2 = None
## RELU
# A2 = None
## MAXPOOL: window 4x4, stride 4, padding 'SAME'
# P2 = None
## FLATTEN
# F = None
## Dense layer
## 6 neurons in output layer.
# outputs = None
Z1 = tfl.Conv2D(8, 4 ,strides = (1, 1) , padding='same')(input_img),
A1 = tfl.ReLU()(Z1),
P1 = tfl.MaxPool2D(pool_size=(8, 8), strides=(8, 8), padding='same')(A1),
Z2 = tfl.Conv2D(16, (2, 2), strides = (1, 1), padding ="same")(P1),
A2 = tfl.ReLU()(Z2),
P2 = tfl.MaxPool2D(pool_size = (4, 4), strides=(4, 4) , padding='same')(A2),
F = tfl.Flatten()(P2),
outputs = tfl.Dense(units= 6 , activation='softmax')(F),
model = tf.keras.Model(inputs=input_img, outputs=outputs)
return model
看
输入形状:[1,?,64,64,8]
我认为不知何故,您在输入张量中添加了一个额外的维度。 我不确定为什么会发生这种情况,因为我从来没有遇到过这种情况。
我尝试将您的模型重写为 tf.keras.Sequential 模型,它似乎有效
result = tf.keras.Sequential()
result.add(tf.keras.layers.Conv2D(8, 4 ,strides = 1 , padding='same'))
result.add(tf.keras.layers.ReLU())
result.add(tf.keras.layers.MaxPool2D(pool_size=(8, 8), strides=8, padding='same'))
result.add(tf.keras.layers.Conv2D(16, 4 ,strides = 1 , padding='same'))
result.add(tf.keras.layers.ReLU())
result.add(tf.keras.layers.MaxPool2D(pool_size=(4, 4), strides=4, padding='same'))
result.add(tf.keras.layers.Flatten())
x=result(input_img)
outputs = tf.keras.layers.Dense(units= 6 , activation='softmax')(x),
model = tf.keras.Model(inputs=input_img, outputs=outputs)
调用model.summary()后,我回来了:
input_1 (InputLayer)-------------[(None, 64, 64, 3)]--------------0
顺序(Sequential)------------(无,64)-----------2456
密集(Dense)----------------------(无,6)------------------- --390
这是您要找的形状吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.