旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

PyTorch

【PyTorch】Macro Soft F1 Lossを実装する

マルチラベル問題の評価指標の一つにMacro F1というものがあります。 Macro F1はそのままでは微分できないのでロス関数には適さないのですが、評価指標を微分可能にしてロス関数にしてしまおうという考えもあるようです。 towardsdatascience.com リンクでは…

【PyTorch】安物GPUだけどバッチサイズ大きくしたい

諸事情によりバッチサイズを大きく取らないといけなくなったのですが、そんな時はoptimizerのstep等のタイミングを変更することで同等のことができそうです。 例えば下記の疑似コードでバッチサイズ16, accumulation=2であればバッチサイズ32で実行している…

【PyTorch】マルチラベル問題で使われているFocalLossを見つけたのでメモ

マルチラベル+不均衡データを扱うのでマルチラベル問題で利用されているFocalLossの実装を探したのですが見つけました。感謝! import torch.nn as nn import torch.nn.functional as F class FocalLoss(nn.Module): def __init__(self, gamma=2): super(Fo…

【PyTorch】モデルがevalモードの時にout of memoryが発生する事への対処法

PyTorchでモデルがtrainモードの時には発生しないのですが、evalモードの時にGPUのメモリが解放されないまま消費されていきout of memoryが発生していました。調べたところ、Variableにvolatileという引数があって、これをTrueにすれば良いよというアドバイ…

【Python】 PyTorchで自前のロス関数を定義する

Kerasと違ってPyTorchで自前のロス関数を定義するのは大変かなと思ったのですが、Kerasとほぼ同じやり方で出来ました。 #1. ロス関数を定義して def dice_coef_loss(input, target): small_value = 1e-4 input_flattened = input.view(-1) target_flattened …