在带有Keras的序贯神经网络中,使用Conv1D作为输入层是有困难的。这是我的代码:
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)的数组
发布于 2018-07-04 14:38:57
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))发布于 2018-07-05 09:27:12
我设法找到了一种使用扁平函数和密集层的解决方案,它起了作用。
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) https://stackoverflow.com/questions/51175884
复制相似问题