Coursera深度学习专项LSTM音乐生成模型维度不匹配报错如何解决
问题原因及修复方案
你代码里的问题集中在循环生成预测值的部分,共3处错误,按优先级排序如下:
- 最后一维维度不匹配的直接原因是
tf.one_hot的深度参数设置错误:你写死了depth=78,但根据报错信息LSTM要求输入最后一维是90,直接把这里改成depth=n_values即可,n_values是代码开头已经定义好的输入特征维度,值为90。 - 输入第一维变成90是因为
tf.argmax没有指定运算维度:out的形状是(batch_size, 90),默认tf.argmax会沿第0维(batch维)取最大值,返回形状为(90,)的张量,直接导致后续维度全部错位。修改为x = tf.math.argmax(out, axis=-1),沿最后一维(类别维)取最大值,返回形状为(batch_size,)符合预期。 - 隐藏层输出逻辑错误:LSTMCell调用后返回的是
(当前步输出, (新隐藏状态, 新细胞状态)),你当前的返回值拆分方式以及给densor传入_的写法是错误的,正确写法如下:
# Step 2.A 正确拆分返回值 a, (_, c) = LSTM_cell(x, initial_state=[a, c]) # Step 2.B 将LSTM的输出传给全连接层 out = densor(a)
修改完以上3处后维度错误即可解决。
内容的提问来源于stack exchange,提问作者Naman Garg
相关产品推荐
相关产品推荐

