首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Conv1D在Keras中的形状误差

Conv1D在Keras中的形状误差
EN

Stack Overflow用户
提问于 2018-07-04 14:21:43
回答 2查看 5.2K关注 0票数 2

在带有Keras的序贯神经网络中,使用Conv1D作为输入层是有困难的。这是我的代码:

代码语言:javascript
复制
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)的数组

EN

回答 2

Stack Overflow用户

发布于 2018-07-04 14:38:57

Conv1D期望输入具有(batch_size, steps, input_dim)形状。

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

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

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

代码语言:javascript
复制
x_train = np.zeros((32, 1, 16))
y_train = np.zeros((32, 1, 16))
票数 1
EN

Stack Overflow用户

发布于 2018-07-05 09:27:12

我设法找到了一种使用扁平函数和密集层的解决方案,它起了作用。

代码语言:javascript
复制
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) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51175884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档