请问您能帮我理解我在尝试构建的模型中遇到的错误吗?
我有训练集、验证集和测试集。训练数据的形状如下:
input_shape = train.shape[1:] #(1500,)
我使用Keras编写了以下模型:
input = Input(shape=(input_shape))# Conv1D + 全局最大池化x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=4)(input)x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=4)(x)x = layers.GlobalMaxPooling1D()(x)x = layers.Dense(128, activation="relu")(x)x = layers.Dropout(0.5)(x)predictions = layers.Dense(1,kernel_initializer='normal', name="predictions")(x)model = tf.keras.Model(input, predictions)model.compile(loss="mean squared error", optimizer="adam", metrics=[concordance_index])
我得到了以下错误:
ValueError Traceback (most recent call last)<ipython-input-60-59c3578104d3> in <module>() 6 7 # Conv1D + 全局最大池化----> 8 x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=4)(protein_input) 9 x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=4)(x) 10 x = layers.GlobalMaxPooling1D()(x)5 frames/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name) 230 ', found ndim=' + str(ndim) + 231 '. Full shape received: ' +--> 232 str(tuple(shape))) 233 # Check dtype. 234 if spec.dtype is not None:ValueError: 层conv1d_49的输入0与层不兼容:预期的最小维度为3,发现的维度为2。接收到的完整形状为:(None, 1500)
我的输入层是否不正确?还是因为Conv1d和最大池化层的顺序问题?
回答:
因为Conv1D层期望输入的形状为batch_shape + (steps, input_dim)
,所以您需要添加一个新的维度。因此:
X = tf.expand_dims(X,axis=2)print(X.shape) # X.shape=(Samples, 1500, 1)
然后,您的X形状变为(Samples,1500,1)
现在,让我们指定输入形状为:
input = Input(shape=(X.shape[1:])