在Keras中使用Conv1D导致形状错误

时间:2018-07-04 14:21:44

标签: python keras conv-neural-network keras-layer

在使用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)的数组

2 个答案:

答案 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)