使用CNN conv1d模型时出现维度错误

我有一个数据集,其中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的形状已经是三维的,那么为什么会显示这个错误呢?


回答:

这是因为你的输入是三维的,而你的目标是二维的。在你的网络内部,没有任何东西可以让你从三维转换到二维。要做到这一点,你可以使用全局池化或扁平化。下面是一个例子

n_sample = 100X = 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) # =====> 从三维转换到二维(也可以使用GlobalAvg1D或Flatten)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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注