前提・実現したいこと
事前にLSTMを実装した機械学習モデルを作成し、
作成した学習済みモデルを読み込み時系列データの推論を実施したい。
作成したスクリプトは
・学習用スクリプト
・推論用スクリプト
で訳各スクリプトの構成は下記となる。
【学習用スクリプト】
①pytorch LSTMにてモデルを作成
②モデルを学習
③モデルを保存
【推論用スクリプト】
①モデルの作成
②学習済みデータのインポート
③推論
上記構成にて【推論用スクリプト】-③推論の箇所を実装しテストした所
'int' object is not callable rnn.py
というエラーが発生し推論が出来ない状態となっている。
環境
Python: 3.6.9
環境: Google Colaboratory PRO
フレームワーク: Pytorch
発生している問題・エラーメッセージ
下記ソースコードを実行した所
model.load_state_dict(torch.load("学習済みモデル.mdl")) model.eval() with torch.no_grad(): model(data)
下記エラーが発生した
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-41-5844fcf260d7> in <module>() 1 model.eval() 2 with torch.no_grad(): ----> 3 model(data) 3 frames /usr/local/lib/python3.6/dist-packages/torch/nn/modules/rnn.py in forward(self, input, hx) 557 else: 558 batch_sizes = None --> 559 max_batch_size = input.size(0) if self.batch_first else input.size(1) 560 sorted_indices = None 561 unsorted_indices = None TypeError: 'int' object is not callable
上記のエラーのエラーの解決方法が解からず宜しければ教えてください。
ソースコード【学習用スクリプト】
①pytorch LSTMにてモデルを作成
class LSTMClassifier(nn.Module): def __init__(self, lstm_input_dim, lstm_hidden_dim, target_dim): super(LSTMClassifier, self).__init__() self.input_dim = lstm_input_dim self.hidden_dim = lstm_hidden_dim self.lstm = nn.LSTM(input_size=lstm_input_dim, hidden_size=lstm_hidden_dim, num_layers=1, #default #dropout=0.2, batch_first=True ) self.dense = nn.Linear(lstm_hidden_dim, target_dim) def forward(self, X_input): _, lstm_out = self.lstm(X_input) # LSTMの最終出力のみを利用する。 linear_out = self.dense(lstm_out[0].view(X_input.size(0), -1)) return torch.sigmoid(linear_out)
model = LSTMClassifier(feature_num, lstm_hidden_dim, target_dim).to(device) loss_function = nn.BCELoss() optimizer= optim.Adam(model.parameters(), lr=1e-4)
③モデルを保存
torch.save(model.state_dict(),学習モデル)
ソースコード【推論用スクリプト】
①pytorch LSTMにてモデルを作成
class LSTMClassifier(nn.Module): def __init__(self, lstm_input_dim, lstm_hidden_dim, target_dim): super(LSTMClassifier, self).__init__() self.input_dim = lstm_input_dim self.hidden_dim = lstm_hidden_dim self.lstm = nn.LSTM(input_size=lstm_input_dim, hidden_size=lstm_hidden_dim, num_layers=1, #default #dropout=0.2, batch_first=True ) self.dense = nn.Linear(lstm_hidden_dim, target_dim) def forward(self, X_input): _, lstm_out = self.lstm(X_input) # LSTMの最終出力のみを利用する。 linear_out = self.dense(lstm_out[0].view(X_input.size(0), -1)) return torch.sigmoid(linear_out)
model = LSTMClassifier(feature_num, lstm_hidden_dim, target_dim).to(device) loss_function = nn.BCELoss() optimizer= optim.Adam(model.parameters(), lr=1e-4)
②学習済みデータのインポート
model.load_state_dict(torch.load(学習モデル)) model.eval()
③推論 ★当コードにてエラー
with torch.no_grad(): model(推論用データ)
試した事
①学習用データと推論用データの比較
・読み込ませるデータに差分があるのかと思い、比較したがカラムに関する差分は無い
・推論する際に必要なデータ数である事の確認
→学習時30ステップを用いて推論する設定となっていた。
推論用データについても30ステップ以上となる様に確認
上記解決方法をご存じな方居られましたら教えてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。