【问题标题】:Input dimension issue of Conv1D networkConv1D网络的输入维度问题
【发布时间】:2020-07-10 22:01:15
【问题描述】:

由于我是深度学习领域的新手,我面临一个关于卷积网络 (1D) 输入形状的奇怪问题。输入是 13 个特征的归一化值,共有 7866 个样本可用

x_train_shape (7866, 13)

每个特征的目标是 0 或 1。

y_train.shape (7866, 13)

我正在使用以下简单的 1D conv 网络只是为了看看它的性能。

from keras.models import Sequential
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=1,
                 activation='relu', input_shape=(13,1)))

model.add(Conv1D(filters=64, kernel_size=1, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(13, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
history = model.fit(x_train, y_train, epochs=20, verbose=0)

它显示了网络的摘要,但也引发了这个错误:

检查输入时出错:预期 conv1d_1_input 有 3 尺寸,但得到了形状为 (7866, 13) 的数组

我尝试从 herehere 实施不同的解决方案。所以当

input_shape = (13,)

被使用,它会引发一个不同的错误,如下所示:

输入 0 与层 conv1d_1 不兼容:预期 ndim=3,找到 ndim=2

谁能告诉我这个网络的正确 input_shape 是什么?为什么?
注: x_train 和 y_train 采用 pandas 数据帧格式。这是否会导致任何问题,我是否必须将其转换为另一种格式?

【问题讨论】:

    标签: python pandas keras deep-learning conv-neural-network


    【解决方案1】:

    保持input_shape 参数不变,您应该为输入添加一个维度,或者“unsqueeze”它。

    x_train = np.expand_dims(x_train, 0)
    

    它的形状现在是:

    (7866, 13, 1)
    

    【讨论】:

    • 我认为它不可用,因为 x_train 是 pandas 数据帧,无法使用 np.expand_dims 函数进行扩展。
    • 你必须使用 x_train.values 把它变成一个 numpy 数组,keras 无论如何都会把它变成一个训练数组
    • 这是我将 pandas 数据帧转换为 numpy x_train_array = x_train.values x_train_array = np.expand_dims(x_train_array, 0) y_train_array = y_train.values y_train_array = np.expand_dims(y_train_array, 0) 输入层:model.add(Conv1D(filters=64, kernel_size=1, activation='relu', input_shape=(13,1))) 拟合模型:model.fit(x_train_array, y_train_array, epochs=20, verbose=0) 但它显示错误:检查输入时出错:预期conv1d_1_input 的形状为 (13, 1) 但数组的形状为 (7866, 13)
    • 不要对目标数组这样做
    • 现在我将 y_train 和 y_test 更改为 numpy 但保持尺寸不变。错误仍然相同:检查输入时出错:预期 conv1d_1_input 具有形状 (13, 1) 但得到形状为 (7866, 13) 的数组我在输入形状或输入数据中做错了吗?
    【解决方案2】:

    按如下方式重塑您的训练数据: 然后运行你的模型

    x_train.reshape(7866, 13,1)
    

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 2017-08-31
      • 2016-12-04
      • 2021-02-12
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多