73760
PyTorchで機械学習を行っているのですが、loss関数を自作したいと思っています。  
今のところ学習用のデータ`x_train, x_test, y_train, y_test`は作成方法として  
**(1) DNNへの入力データ**  
`Data_A（サイズ[10000,200]）`→処理1(不可逆変換)→`Data_X（サイズ[10000,200]）`

**(2) DNNからの出力データ**  
`Data_A（サイズ[10000,200]）`→処理1(不可逆変換)→`Data_X（サイズ[10000,200]）`  
`Data_B（サイズ[10000,200]）`→処理1(不可逆変換)→`Data_P（サイズ[10000,200]）`

`Data_X（サイズ[10000,200]）`と`Data_P（サイズ[10000,200]）`→処理2(不可逆変換)→`Data_Y（サイズ[10000,200]）`  
とした後、  
`from sklearn.model_selection import train_test_split`  
を用いて  
**(3) データの分割**  
`x_train, x_test, y_train, y_test =
train_test_split(Data_X,Data_Y,test_size=0.2, random_state=0)`  
のようにしています。  
この時自作loss関数の計算に、`Data_Y`と推定した`Data_Y`のみならず、`Data_A`と`Data_B`も使いたいです。  
今のところ実装を試みている手法は「(3)で振り分けられたインデックスを記録しておき、loss計算時に何個目のバッチかを見て、あらかじめインデックスを合わせて保存しておいた`Data_A`と`Data_B`(の一部)のファイルを読み込む」という方法なのですが、変更箇所が多岐にわたりそうなため、もしもっと効率的かつバグを生まなさそうな方法があれば試したいと思っています。  
より効率的な方法をご存じの方、思いついた方など、お知恵を貸していただけないでしょうか。

なお単なる「`Data_Y`と推定した`Data_Y`のみを引数にもつ自作loss関数」を動かすことはできています。よろしくお願いします。
CC BY-SA 4.0
2021-01-31T13:22:03.823
73721
2021-02-02T09:06:53.730
30785
question
機械学習 pytorch
PyTorchでのloss関数自作時に出力ベクトル以外の変数も使いたい
自己解決したので閉じます。  
PyTorch上では、loss関数の引数は自由に持つことができ、教師データと同じサイズのベクトルである必要もないため、追加変数がある場合も、通常のコスト関数の自作と同じように設計することができました。
CC BY-SA 4.0
2021-02-02T09:06:53.730
73760
2021-02-02T09:06:53.730
30785
73721
answer