前提・実現したいこと
ここに質問の内容を詳しく書いてください。
DeepLearningの学習を開始した初学者です。
PyTorch_Lightningを用いて回帰の問題を解こうとしています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Global seed set to 0 GPU available: True, used: False TPU available: False, using: 0 TPU cores /usr/local/lib/python3.7/dist-packages/pytorch_lightning/utilities/distributed.py:69: UserWarning: GPU available but not used. Set the gpus flag in your trainer `Trainer(gpus=1)` or script `--gpus=1`. warnings.warn(*args, **kwargs) | Name | Type | Params ------------------------------------- 0 | bn | BatchNorm1d | 26 1 | fc1 | Linear | 140 2 | fc2 | Linear | 11 ------------------------------------- 177 Trainable params 0 Non-trainable params 177 Total params 0.001 Total estimated model params size (MB) Validation sanity check: 0% 0/2 [00:00<?, ?it/s] Global seed set to 0 Epoch 49: 100% 46/46 [00:00<00:00, 219.53it/s, loss=nan, v_num=0] {'train_loss': tensor(nan), 'train_loss_epoch': tensor(nan), 'train_loss_step': tensor(nan), 'val_loss': tensor(nan)}
該当のソースコード
df = pd.read_csv("housing_train.csv") t = df["y"] x = df.drop("y", axis=1) dataset = torch.utils.data.TensorDataset(x, t) n_train = int(len(dataset)*0.7) n_val = len(dataset) - n_train pl.seed_everything(0) train, val = torch.utils.data.random_split(dataset, [n_train, n_val]) batch_size = 10 train_loader = torch.utils.data.DataLoader(train, batch_size, shuffle=True, drop_last=True) val_loader = torch.utils.data.DataLoader(val, batch_size) class Net(pl.LightningModule): def __init__(self): super().__init__() self.bn = nn.BatchNorm1d(13) self.fc1 = nn.Linear(13, 10) self.fc2 = nn.Linear(10, 1) def forward(self, x): h = self.bn(x) h = self.fc1(h) h = F.relu(h) h = self.fc2(h) return h def training_step(self, batch, batch_idx): x, t = batch y = self(x) loss = F.mse_loss(y, t) self.log('train_loss', loss, on_step=True, on_epoch=True) return loss def validation_step(self, batch, batch_idx): x, t = batch y = self(x) loss = F.mse_loss(y, t) self.log('val_loss', loss, on_step=False, on_epoch=True) return loss def configure_optimizers(self): optimizer = torch.optim.SGD(self.parameters(), lr=0.01) return optimizer
試したこと
クラス定義した上で以下のようにインスタンス化して学習してみました。
net = Net()
logger = CSVLogger(save_dir='logs', name='my_exp')
trainer = pl.Trainer(max_epochs=50, deterministic=True, logger=logger)
trainer.fit(net, train_loader, val_loader)
trainer.callback_metricsで結果を確認してみてもNaNになってしまいます。
どのような原因が考えられますでしょうか?
お手数おかけしますが、ご助言頂けますと幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー