Newbie here, trying to learn pytorch. Recently, I’m using lstm or gru to do failure prediction. This is a binary classification problem ,so I use BCEWithLogitsLoss as the loss function, but finally, it is wrong.
%matplotlib notebook import pandas as pd import os import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler import torch from torch import nn data = pd.read_csv('D:/A_PHM_Data/data/train/002/00a22713-68d5-372a-a009-b948ce453442.csv', header=0) data = data.iloc[:, :-3] value = data.values.astype(float) train_x = value[:300].reshape(1, -1, 72) train_y = np.zeros((train_x.shape,1)) train_x = torch.from_numpy(train_x) train_y = torch.from_numpy(train_y) class LSTM(nn.Module): def __init__(self): super(LSTM,self).__init__() self.lstm = nn.LSTM(input_size=72, hidden_size=100,batch_first=True) self.out = nn.Linear(100,1) def forward(self, x, h_state, c_state): r_out, (h_state, c_state) = self.lstm(x, (h_state, c_state)) output = self.out(r_out) # output = torch.sigmoid(output) return output def InitHidden(self): h_state = torch.zeros(1,1,100) c_state = torch.zeros(1,1,100) return h_state, c_state device = torch.device('cuda') model = LSTM().to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.001) loss = torch.nn.BCEWithLogitsLoss() h_state, c_state = model.InitHidden() h_state, c_state = h_state.to(device), c_state.to(device) train_x = train_x.float().to(device) train_y = train_y.float().to(device) test_x = test_x.to(device) test_y = test_y.to(device) model.train() for epoch in range(1000): output = model(train_x, h_state,c_state).squeeze(0) loss = loss(output, train_y) optimizer.zero_grad() loss.backward() optimizer.step()
TypeError Traceback (most recent call last)
2 for epoch in range(1000):
3 output = model(train_x, h_state,c_state).squeeze(0)
----> 4 loss = loss(output, train_y)
TypeError: ‘Tensor’ object is not callable