1. 程式人生 > >optimizer can only optimize Tensors, but one of the params is set的一個可能原因

optimizer can only optimize Tensors, but one of the params is set的一個可能原因

下面的程式碼會提示錯誤:

[{mlp.parameters() for mlp in mlps},lr=LR]]

改成下面的可以解決錯誤:

[{"params":mlp.parameters()} for mlp in mlps,lr=LR]

可能是因為這裡的引數應該是一個字典型別,或者是一個tensor。

當代碼是這樣的時候:

optimizer=torch.optim.Adam([mlps[1].parameters(),mlps[2].parameters()],lr=LR)

提示錯誤:

TypeError: optimizer can only optimize Tensors, but one of the params is Module.parameters

 改成下面的可以正常執行:

optimizer=torch.optim.Adam([{"params":mlps[1].parameters()},{"params":mlps[2].parameters()}],lr=LR)

具體原因請看:python列表推導生成字典的注意事項

後面的學習率等等引數,如果在字典中指定,那麼後面的引數lr將對這個鍵值對不起作用;如果不在字典中指定,就會使用後面的引數,如果使用了字典形式,又沒有在字典中指定學習率,也沒有在後面的引數中指定學習率,就會使用預設值0.001。