【问题标题】:Dimensionality error while using CNN conv1d model使用 CNN conv1d 模型时的维度错误
【发布时间】:2020-11-07 05:42:58
【问题描述】:

我有一个数据集,其中 x_train 形状为 (34650,10,1) ,y_train 形状为 (34650,) ,x_test 形状为 (17067,10,1) 并且 y_test 为 (17067,) 。

我正在制作一个简单的 cnn 模型 -

input_layer = Input(shape=(10, 1))
conv2 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(input_layer)
pool1 = MaxPooling1D(pool_size=1)(conv2)
drop1 = Dropout(0.5)(pool1)
pool2 = MaxPooling1D(pool_size=1)(drop1)
conv3 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(pool2)
drop2 = Dropout(0.5)(conv3)
conv4 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(drop2)
pool3 = MaxPooling1D(pool_size=1)(conv4)
conv5 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(pool3)
output_layer = Dense(1, activation='sigmoid')(conv5)
model_2 = Model(inputs=input_layer, outputs=output_layer)

但是当我试图拟合模型时

model_2.compile(loss='mse',optimizer='adam')
model_2 = model_2.fit(x_train, y_train,
          batch_size=128,
          epochs=2,
          verbose=1,
          validation_data=(x_test, y_test))

我收到了这个错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-177-aee9b3241a20> in <module>()
      4           epochs=2,
      5           verbose=1,
----> 6           validation_data=(x_test, y_test))

2 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    133                         ': expected ' + names[i] + ' to have ' +
    134                         str(len(shape)) + ' dimensions, but got array '
--> 135                         'with shape ' + str(data_shape))
    136                 if not check_batch_axis:
    137                     data_shape = data_shape[1:]

ValueError: Error when checking target: expected dense_14 to have 3 dimensions, but got array with shape (34650, 1)

x_train和x_test的形状已经是3维了,为什么会出现这个错误

【问题讨论】:

  • 请注意cnn 标签不涉及卷积神经网络(已编辑)。

标签: machine-learning keras deep-learning conv-neural-network


【解决方案1】:

这是因为您的输入是 3d,而您的目标是 2d。在您的网络内部,没有任何东西可以让您从 3d 传递到 2d。为此,您可以使用全局池化或展平。下面是一个例子

n_sample = 100
X = np.random.uniform(0,1, (n_sample,10,1))
y = np.random.randint(0,2, n_sample)

input_layer = Input(shape=(10, 1))
conv2 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(input_layer)
pool1 = MaxPooling1D(pool_size=1)(conv2)
drop1 = Dropout(0.5)(pool1)
pool2 = MaxPooling1D(pool_size=1)(drop1)
conv3 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(pool2)
drop2 = Dropout(0.5)(conv3)
conv4 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(drop2)
pool3 = MaxPooling1D(pool_size=1)(conv4)
conv5 = Conv1D(filters=64,
               kernel_size=3,
               strides=1,
               activation='relu')(pool3)
x = GlobalMaxPool1D()(conv5) # =====> from 3d to 2d (also GlobalAvg1D or Flatten are ok)
output_layer = Dense(1, activation='sigmoid')(x)
model_2 = Model(inputs=input_layer, outputs=output_layer)

model_2.compile('adam', 'binary_crossentropy')
model_2.fit(X,y, epochs=3)

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-04-29
    • 1970-01-01
    • 2020-12-06
    • 2021-02-12
    相关资源
    最近更新 更多