在使用Keras将Conv1D用作顺序NN中的输入层时,我遇到了麻烦。 这是我的代码:
import numpy as np
from keras.layers.convolutional import Conv1D
from keras.models import Sequential
from keras.optimizers import Adam
conv1d = Conv1D(input_shape=(None, 16), kernel_size=2, filters=2)
model = Sequential()
model.add(conv1d)
model.compile(loss="logcosh", optimizer=Adam(lr=0.001))
x_train = np.zeros((32, 16, 1))
y_train = np.zeros((32, 16, 1))
print(x_train.shape)
model.fit(x_train, y_train, batch_size=4, epochs=20)
这是错误。我已经尝试了多种方法,但是没有一种方法可以帮助我解决问题。
ValueError:检查输入时出错:预期conv1d_47_input具有形状(无,16),但具有形状(16,1)的数组
答案 0 :(得分:0)
Conv1D
期望输入的形状为(batch_size, steps, input_dim)
。
根据训练数据的形状,最大长度为16,输入维数仅为1。这是您需要的吗?
如果是这样,则可以将输入形状指定为(16, 1)
(长度始终为16)或(None, 1)
(动态长度)。
如果要定义长度为1且维数为16的序列,则需要不同形状的训练数据:
x_train = np.zeros((32, 1, 16))
y_train = np.zeros((32, 1, 16))
答案 1 :(得分:0)
我设法找到了使用扁平化功能和密集层的解决方案,并且有效
import numpy as np
from keras.layers.convolutional import Conv1D
from keras.models import Sequential
from keras.optimizers import Adam
from keras.layers import Conv1D, Dense, MaxPool1D, Flatten, Input
conv1d = Conv1D(input_shape=(16,1), kernel_size=2, filters=2)
model = Sequential()
model.add(conv1d)
model.add(Flatten())
model.add(Dense(16))
model.compile(optimizer=optimizer,loss="cosine_proximity",metrics=["accuracy"])
x_train = np.zeros((32,16,1))
y_train = np.zeros((32,16))
print(x_train.shape)
print()
model.fit(x_train, y_train, batch_size=4, epochs=20)