我之前图层的输出具有形状(无,30,600) . 我想将这个矩阵的每一行乘以一个 different (600,600)矩阵,或者等效地将该矩阵乘以一个3D权重矩阵 . 这可以通过向每行应用不同的密集层来实现 . 我尝试使用TimeDistributed Wrapper,但是将 same 密集层应用于每一行 . 我也试过像这样使用lambda层:
Lambda(lambda x: tf.stack(x, axis=1))(
Lambda(lambda x: [Dense(600)(each) for each in tf.unstack(x, axis=1)])(prev_layer_output)
)
这似乎解决了这个问题,我能够正确地训练模型 . 但是我注意到model.summary()不识别这些密集层,它们也没有反映在总可训练参数的计数中 . 此外,当我加载模型时,我无法恢复其重量,因此整个训练都被浪费了 . 我该如何解决这个问题?如何在矩阵的每一行中应用不同的密集层?
2 回答
您可以使用多个图层,而不是将所有内容包装到单个
Lambda
图层中 .现在,您可以在
model.summary()
中看到30个Dense(600)
图层 .EDIT: 要验证此模型是否正在学习:
您应该能够看到损失正在减少:
此外,您可以通过比较模型拟合之前和之后的值来验证权重是否确实更新:
你可以将(30,600)矩阵与(600,30,600)元素相乘,这样你就可以获得一个(600,30,600),如果你在最后一个维度上求和,你应该得到你想要的转置 . 我测试了这个在numpy而不是tensorflow但它应该是相同的