【发布时间】:2018-06-17 04:51:49
【问题描述】:
您好,我必须实现一个 cnn,我是 Keras 和 Tensorflow 的新手,所以如果我犯了错误,我深表歉意。
这就是我的工作:
数据集是一个 numpy 数组 (23, 4800000),#number of audio track x #number of samples。
所以我将数据集拆分为训练 (10, 4800000)、验证 (7, 4800000) 和测试 (6, 4800000)
沿列的卷积过程,所以我必须对输入进行整形:
X = np.expand_dims(train, axis=2)
Y = np.expand_dims(valid, axis=2)
第一部分cnn的代码是:
cnn = Sequential()
cnn.add(Conv1D(40, 80, input_shape=(4800000, 10)))
cnn.add(MaxPooling1D(pool_size=2))
cnn.add(Conv1D(40, 8000))
cnn.add(MaxPooling1D(pool_size=20))
cnn.add(Flatten())
cnn.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_1 (Conv1D) (None, 4799921, 40) 32040
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, 2399960, 40) 0
_________________________________________________________________
conv1d_2 (Conv1D) (None, 2391961, 40) 12800040
_________________________________________________________________
max_pooling1d_2 (MaxPooling1 (None, 119598, 40) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 4783920) 0
=================================================================
Total params: 12,832,080
Trainable params: 12,832,080
Non-trainable params: 0
_______________________________
cnn.compile(loss='mean_squared_error', optimizer='adam')
cnn.fit(X,Y)
错误是:
ValueError: Error when checking input: expected conv1d_3_input to have shape (None, 4800000, 10) but got array with shape (4800000, 10, 1)
我真的不明白这是什么意思,请有人可以帮助我吗?
所以这几天我尽量简化我的工作。
X_train,X_valid = (7,7500,1),7 个轨道,7500 个样本和 1 个通道
y_train, y_valid = (7,7500),对于 7 个轨道中的每一个,在任何样本中都对应一个概率值。
model = Sequential()
model.add(Conv1D(40, 80, activation='relu', input_shape=(7500,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.5))
model.add(Conv1D(40, 800 ,activation='relu'))
model.add(MaxPooling1D(pool_size=20))
model.add(Dropout(0.5))
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['accuracy'])
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_112 (Conv1D) (None, 7421, 40) 3240
_________________________________________________________________
max_pooling1d_93 (MaxPooling (None, 3710, 40) 0
_________________________________________________________________
dense_6 (Dense) (None, 3710, 40) 1640
_________________________________________________________________
dropout_81 (Dropout) (None, 3710, 40) 0
_________________________________________________________________
conv1d_113 (Conv1D) (None, 2911, 40) 1280040
_________________________________________________________________
max_pooling1d_94 (MaxPooling (None, 145, 40) 0
_________________________________________________________________
dropout_82 (Dropout) (None, 145, 40) 0
=================================================================
Total params: 1,284,920
Trainable params: 1,284,920
Non-trainable params: 0
model.fit(X_train, y_train, batch_size=50, epochs=1, validation_data=(X_valid, y_valid))
ValueError: Error when checking target: expected dropout_82 to have 3 dimensions, but got array with shape (7, 7500)
我认为它与 y_train 和 y_valid 有关,但如果我扩大维度,错误会随之变化
ValueError: Error when checking target: expected dropout_86 to have shape (None, 145, 40) but got array with shape (7, 7500, 1)
【问题讨论】:
-
input_shape不包括批量大小:stackoverflow.com/a/48141688/712995 -
如果您的输入形状为
(4800000, 10),您将构建一个网络,一次对 10 个音频样本进行分类/回归——这是您想要的吗? -
是的,我需要为每个轨道 (10) 沿样本系列 (4800000) 进行卷积和池化。
-
不抱歉,我需要为每个轨道 (10) 沿样本系列 (4800000) 进行卷积和池化。我很困惑对不起
标签: python tensorflow keras