Python Keras中使用Conv1D的形状错误

Python Keras中使用Conv1D的形状错误,python,keras,conv-neural-network,keras-layer,Python,Keras,Conv Neural Network,Keras Layer,我在使用Conv1D作为带有Keras的顺序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,

我在使用Conv1D作为带有Keras的顺序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_输入具有形状(无,16),但获得具有形状(16,1)的数组


Conv1D
希望输入具有形状
(批次大小、步骤、输入尺寸)

根据训练数据的形状,最大长度为16,输入维度仅为1。这就是你需要的吗

如果是,则可以将输入形状指定为
(16,1)
(长度始终为16)或
(无,1)
(动态长度)

如果要定义长度为1、维度为16的序列,则需要不同形状的训练数据:

x_train = np.zeros((32, 1, 16))
y_train = np.zeros((32, 1, 16))

我设法找到了一个解决方案,使用扁平功能和密集层,它的工作

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) 

仍然不起作用。错误是:检查目标时出错:预期conv1d_52具有形状(无,2),但获得具有形状(1,16)的数组。最后一层是1d卷积,它为每一步生成一个二维向量。Keras告诉你目标的形状(
y_train
)与最后一层的输出形状不兼容。我看不出这个模型的用途,但最简单的“修复”方法是输出过滤器的数量与输出的维度相匹配,即:
conv1d=conv1d(input_shape=(None,16),kernel_size=2,filters=16)
我有一个长度为16的32个向量的数据集。我想把它们放在一个盒子里。上述代码只是神经网络的一个片段。我在WRDS后添加了几层。但由于第一层不起作用,我被困在这里。我已尝试添加如上所示的维度。我试着用各种方法来排列尺寸,但一次又一次地我得到一些错误。我找不到前进的路。如果我尝试交换不同的层,可能会有所帮助,但也会改变算法的平均目标,对吗?