我正在尝试分批训练RNN。
输入输入尺寸
(10、70、3075),
其中10是批次大小,70是时间维度,3075是频率维度。
有三个输出,其大小为
(10、70、1025)
每个,基本上是10个频谱图,大小分别为(70,1025)。
我想通过回归训练该RNN,其结构为
input_img = Input(shape=(70,3075 ) )
x = Bidirectional(LSTM(n_hid,return_sequences=True, dropout=0.5, recurrent_dropout=0.2))(input_img)
x = Dropout(0.2)(x)
x = Bidirectional(LSTM(n_hid, dropout=0.5, recurrent_dropout=0.2))(x)
x = Dropout(0.2)(x)
o0 = ( Dense(1025, activation='sigmoid'))(x)
o1 = ( Dense(1025, activation='sigmoid'))(x)
o2 = ( Dense(1025, activation='sigmoid'))(x)
问题在于,输出密集层无法考虑三个维度,它们需要类似(None,1025)的内容,除非我沿着时间维度进行连接,否则我不知道该如何提供。
发生以下错误:
ValueError:无法为形状为'(?,?)'的Tensor u'dense_2_target:0'输入形状(10、70、1025)的值
batch_shape选项在输入层中有用吗?我实际上已经尝试过,但是我遇到了同样的错误。
最佳答案
在这种情况下,第二个RNN将序列折叠为单个向量,因为默认情况下return_sequences=False
。要使模型返回序列并在每个时间步上分别运行Dense层,只需将return_sequences=True
也添加到第二个RNN中:
x = Bidirectional(LSTM(n_hid, return_sequences=True, dropout=0.5, recurrent_dropout=0.2))(x)
密集层自动应用于最后一个尺寸,因此以后无需重塑形状。
关于python - Python,Keras-ValueError:无法为Tensor u'dense_2_target:0'输入形状为((?,?)'的形状(10,70,1025)的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54260919/