【问题标题】:Error of Shape Using Conv1D in Keras在 Keras 中使用 Conv1D 的形状错误
【发布时间】:2023-03-12 14:47:01
【问题描述】:

我在使用 Keras 的 Sequential NN 中使用 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 的形状为 (None, 16) 但得到的数组的形状为 (16, 1)

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 还是不行。错误是:检查目标时出错:预期 conv1d_52 的形状为 (None, 2) 但得到的数组的形状为 (1, 16)
    • 你的最后一层是一维卷积,它为每一步生成一个二维向量。 Keras 告诉您目标的形状 (y_train) 与最终层的输出形状不兼容。
    • 我不知道你将使用这个模型去哪里,但“修复”它的最简单方法是输出过滤器的数量与输出的维度相匹配,即:@987654327 @
    • 我有一个包含 32 个长度为 16 的向量的数据集。我想把它们放在一个 convNN 中。代码 qbove 只是神经网络的一个 sn-p。之后我添加了几层。但由于第一层不起作用,我被困在这里。我试图添加一个维度,如上图所示。我试图以各种方式排列维度,但我一次又一次地遇到一些错误。我找不到继续前进的方法。也许如果我尝试交换不同的层它可能会有所帮助,但它也会改变算法的总体目标,对吧?
    【解决方案2】:

    我设法使用 flatten 函数和密集层找到了一个解决方案,并且成功了

    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) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-31
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 2022-06-11
      相关资源
      最近更新 更多