我这样使用Conv1D
X_train_t = X_train.reshape(X_train.shape[0], 1,12)
X_test_t = X_test.reshape(X_test.shape[0], 1,12)
print(X_train_t.shape)
print(X_train_t)
K.clear_session()
model = Sequential()
model.add(Conv1D(12,1, activation='relu', input_shape=(1,12)))
#model.add(MaxPooling1D(pool_size = (6)))
model.add(LSTM(3))
model.add(Dense(1))
我在模型行.add(Conv1D ..
下添加了maxpooling来提高性能。model.add(MaxPooling1D(pool_size = (6)))
但是显示这样的错误
ValueError: Negative dimension size caused by subtracting 6 from 1 for 'max_pooling1d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,12].
如果我将pool_size =(1)设置为有效,则它将增加更多的损失值。如果我不想将pool_size更改为另一个值,请执行以下操作:1.如何编辑模型?
答案 0 :(得分:0)
MaxPooling1D的形状为(batch_size, steps, features)
的输入需要3d张量。根据您的代码,X_train_t
和X_test_t
有1步(*.shape[0], 1, 12
)。当Pooling将其窗口移动6步(pool_size=(6)
)时,它不能这样做。结果,它抛出了这样的异常。
建议:尝试更改输入形状
最小示例:这是Conv1D
的一种可能解决方案:
model = Sequential()
model.add(Embedding(input_dim=1000, output_dim=128, input_shape=(12,))
model.add(Convolution1D(filters=2, kernel_size=100, padding='same', activation=tf.nn.relu))
model.add(MaxPooling1D(pool_size=6))
model.add(GlobalAveragePooling1D())
model.add(Dense(2))
答案 1 :(得分:0)
我添加了一个 Dense 层和 Reshape 层来解决这个问题。
model = Sequential()
model.add(Conv1D(12,1, activation='relu', input_shape=(1,12)))
model.add(Dense(32*3))
model.add(Reshape((3,32)))
model.add(MaxPooling1D(pool_size = (3)))
model.add(LSTM(32))
model.add(Dense(1))