我正在嘗試從具有自定義層的 Keras 模型 (.h5/json) 轉(zhuǎn)換為張量流模型 (.pb),并且我使用以下自定義 LSTM 層。我可以使用自定義層加載模型,也可以在 tensorflow.keras 上使用它。但是,當(dāng)我嘗試時遇到以下問題loaded_model.save(model_name, save_format="tf")Traceback (most recent call last): File "/home/usr7/s70087f/.local/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py", line 1619, in _create_c_op c_op = c_api.TF_FinishOperation(op_desc)tensorflow.python.framework.errors_impl.InvalidArgumentError: Shape must be rank 2 but is rank 1 for 'MatMul_7' (op: 'MatMul') with input shapes: [256], [256,256].V_tm1_i(帶有Attention的LSTM輸入門的計算)有一個問題: i = self.recurrent_activation( x_i + K.dot(V_tm1_i, self.recurrent_kernel[:, :self.units]) + K.dot(c_i, self.context_kernel[:, :self.units]))我知道我們必須使用 >= 2 ndims 的張量來“MatMul”,但實際上它有一個批量大小維度。因此我希望它成為[None,256], [256,256]。顯示自定義層的輸入和隱藏狀態(tài):AttentionVLSTMinputsTensor("model/Decoder_Attention_VLSTM/strided_slice_1:0", shape=(None, 256), dtype=float32)states(<tf.Tensor 'model/reshape/Reshape:0' shape=(None, 27136) dtype=float32>, <tf.Tensor 'model/Decoder_Activation_2/Relu:0' shape=(None, 256) dtype=float32>)AttentionVLSTMinputsTensor("TensorArrayV2Read/TensorListGetItem:0", shape=(None, 256), dtype=float32)states(<tf.Tensor 'Placeholder_3:0' shape=(None, 27136) dtype=float32>, <tf.Tensor 'Placeholder_4:0' shape=(None, 256) dtype=float32>)AttentionVLSTMinputsTensor("inputs:0", shape=(None, 256), dtype=float32)states(<tf.Tensor 'states:0' shape=(27136,) dtype=float32>, <tf.Tensor 'states_1:0' shape=(256,) dtype=float32>)V_tm1是從隱藏狀態(tài)獲得的,“Placeholder_4:0”是正確的形狀[None,256],但“states_1:0”丟失了batch axis的維度[256,]。其他自定義層(除了本層)可以運行,并且該層也在tensorflow.Keras中運行。
1 回答

FFIVE
TA貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
我可以解決這個問題。錯誤的原因是該自定義類末尾的初始狀態(tài)的定義。這是不必要的,因為初始狀態(tài)已經(jīng)在“AbstractRNNCell”中定義。
添加回答
舉報
0/150
提交
取消