我正在编辑神经网络以在GPU上运行。但是,当我将LSTM层之一切换到CuDNNLSTM(具有完全相同的参数)时,该模型无法编译并引发以下错误:
形状必须相等,但必须为2和3 将形状0与其他形状合并。对于输入形状为[?,200],[?, 1536,50]的'loss_52 / AddN'(op:'AddN')。
我还有其他CuDNN层,它们的编译都很好,而这层和那些层之间的唯一区别是,该层将return_sequences设置为true,其他人则没有,但是我不知道那是否有什么要用它做
这是我的功能,这个版本可以编译
def build_generator(original_input_music, input_music):
hidden_output = tf.keras.layers.CuDNNLSTM(200, activity_regularizer = tf.math.sigmoid)(input_music)
repeated_output = tf.keras.layers.RepeatVector(1536)(hidden_output)
end_sequence = tf.keras.layers.LSTM(50, return_sequences = True, activation = tf.math.sigmoid)(repeated_output)
results = tf.keras.layers.Concatenate(1)([input_music, end_sequence])
return tf.keras.Model(original_input_music, results), results
但是只要我将1个LSTM层切换到CuDNN:
def build_generator(original_input_music, input_music):
hidden_output = tf.keras.layers.CuDNNLSTM(200, activity_regularizer = tf.math.sigmoid)(input_music)
repeated_output = tf.keras.layers.RepeatVector(1536)(hidden_output)
end_sequence = tf.compat.v1.keras.layers.CuDNNLSTM(50, return_sequences = True, activity_regularizer = tf.math.sigmoid)(repeated_output)
results = tf.keras.layers.Concatenate(1)([input_music, end_sequence])
return tf.keras.Model(original_input_music, results), results
model.compile失败
这是编译步骤,仅供参考:
combined.compile(optimizer = 'adam', loss='binary_crossentropy')
(需要注意的是-我正在使用的计算机仅是CPU,但是我只是想查看模型是否可以编译,并且基于其他CuDNN层都可以正常编译的事实,我没有认为那不是问题。