我有以下用于下一帧预测的 convLSTM 模型:
class MyModel(keras.models.Model):
def __init__(self, n_layers, n_filters, kernel_size):
super(MyModel, self).__init__()
self.n_layers = n_layers
self.n_filters = n_filters
self.kernel_size = kernel_size
self.conv_lstms = []
self.batch_norms = []
for i in range(self.n_layers):
conv_lstm = layers.ConvLSTM2D(filters = self.n_filters[i],
kernel_size = self.kernel_size[i],
padding = 'same',
return_sequences = True)
bn = layers.BatchNormalization()
self.batch_norms.append(bn)
self.conv_lstms.append(conv_lstm)
self.cnn = layers.Conv3D(filters=1,
kernel_size=(3,3,3),
activation='sigmoid',
padding='same')
这是我的通话功能:
def call(self, inputs):
input_shape = inputs.shape
seq_len = input_shape[1]
x = inputs
for i in range(seq_len):
for j in range(self.n_layers):
x = self.conv_lstms[j](x)
x = self.batch_norms[j](x)
if i == 0:
x_outputs = x
else:
x_outputs = layers.concatenate([x_outputs, x], axis=1)
x_outputs = self.conv3d(x_outputs)
return x_outputs
我有一般的 model.compile() 调用和 model.fit() 调用。我将输入数据传递给具有以下输入形状的输入层:
inputLayer = tf.keras.Input(shape=(12, 74, 104, 1)
x = MyModel(nLayers, nFilters, kernelSize)(inputLayer)
model = tf.keras.Model(inputs=inputLayer, outputs=x)
我的输入数据形状也为 (5000, 12, 74, 104, 1) 其中
(batch_size, timesteps, height, width, channels)
但我收到以下错误:
ValueError:“conv_lstm2d”层的输入 0 与 图层:预期形状=(无,无,74、104、1),发现形状=(无,12, 74、104、64)
层“mymodel_conv_lstm”接收的调用参数(类型 MyModel): • inputs=tf.Tensor(shape=(None, 12, 74, 104, 1), dtype=float32)
我试过设置
shape=(None, 12, 74, 104, 1)
和 shape=(None, 74, 104, 1)
但它们都不起作用。
任何帮助将不胜感激