加載模型后我無法訪問圖層。我創建的模型如下:def create_model(vocab_dim, hidden_dim): input_seq_axis1 = Axis('inputAxis1') input_sequence_before = sequence.input_variable(shape=vocab_dim, sequence_axis=input_seq_axis1, is_sparse = use_sparse) input_sequence_after = sequence.input_variable(shape=vocab_dim, sequence_axis=input_seq_axis1, is_sparse = use_sparse) e=Sequential([ C.layers.Embedding(hidden_dim), Stabilizer() ],name='Embedding') a = Sequential([ e, C.layers.Recurrence(C.layers.LSTM(hidden_dim//2),name='ForwardRecurrence'), ],name='ForwardLayer') b = Sequential([ e, C.layers.Recurrence(C.layers.LSTM(hidden_dim//2),go_backwards=True), ],name='BackwardLayer') latent_vector = C.splice(a(input_sequence_before), b(input_sequence_after)) bias = C.layers.Parameter(shape = (vocab_dim, 1), init = 0, name='Bias') weights = C.layers.Parameter(shape = (vocab_dim, hidden_dim), init = C.initializer.glorot_uniform(), name='Weights') z = C.times_transpose(weights, latent_vector,name='Transpose') + bias z = C.reshape(z, shape = (vocab_dim)) return z然后我加載模型:def load_my_model(vocab_dim, hidden_dim): z=load_model("models/lm_epoch0.dnn") input_sequence_before = z.arguments[0] input_sequence_after = z.arguments[1] a=z.ForwardLayer b=z.BackwardLayer latent_vector = C.splice(a(input_sequence_before), b(input_sequence_after))我收到一個錯誤:TypeError("argument ForwardRecurrence 的類型 SequenceOver[inputAxis1][Tensor[100]] 與傳遞的變量的類型 SequenceOver[inputAxis1][SparseTensor[50000]] 不兼容",)看起來名稱引用的層 (z.ForwardLayer) 表示來自層立即輸入的函數。如何計算“latent_vector”(我需要這個變量來創建交叉熵和損失函數以繼續訓練)?
1 回答
HUWWW
TA貢獻1874條經驗 獲得超12個贊
根據錯誤,與 ForwardLayer 的預期 (100) 相比,您的輸入 seq 的尺寸太大 (5000)。
當您通過 選擇節點 ForwardLayer 時z.ForwardLayer,您只能選擇那個非常特定的節點/層,而不是與其連接的計算圖的層/節點/其余部分。
你應該這樣做a = C.combine([z.ForwardLayer.owner]),你應該沒事。
添加回答
舉報
0/150
提交
取消
