【问题标题】:ValueError: Error when checking target: expected dropout_82 to have 3 dimensions, but got array with shape (7, 7500)ValueError:检查目标时出错:预期 dropout_82 有 3 个维度,但得到了形状为 (7, 7500) 的数组
【发布时间】: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


【解决方案1】:

正如错误消息所说,输入数据的形状与预期不符,因为您扩展了错误的维度。

在这种情况下,您的原始训练数据的形状为 (23, 4800000),在扩展维度后变为 (23, 4800000, 1)

X = np.expand_dims(train, axis=2)

但输入数据的预期形状是 (None, 4800000, 10),这里的 None 表示可变长度。

你应该做的只是重塑数据

X = np.expand_dims(train, axis=0)

【讨论】:

  • 对不起,我错过了一个操作,我已经完成了 train 的转置,然后我扩展了 train-set 的维度。 train.shape = 10,4800000) train = train.T train.shape(4800000,10) X = np.expand_dims(train, axis=2) X.shape = (4800000, 10, 1) 所以你的意思是扩展维度有 (1, 4800000, 10)?
猜你喜欢
  • 1970-01-01
  • 2019-09-11
  • 2019-11-13
  • 2019-03-02
  • 2020-02-07
  • 1970-01-01
  • 2020-09-26
  • 2018-09-12
  • 2019-08-22
相关资源
最近更新 更多