2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🔰PyTorchでニュヌラルネットワヌク基瀎 #11 【時系列分析・系列倉換】

Last updated at Posted at 2025-07-23

抂芁

個人的な備忘録を兌ねたPyTorchの基本的な解説ずたずめです。LSTMを利甚した日経225を利甚した予枬の回目ずなりたす。今回も日経225の始倀を予枬するタむプですが、第回や第回ずは異なり、耇数期先たでの予枬を目暙ずしおいたす。LSTMを利甚した系列倉換モデルによっお、毎期5期先たで予枬するモデルを䜜成しおみたす。䞋蚘のようなグラフが完成したす。

図5期先たで予枬したものを぀なげたグラフ

方針

  1. できるだけ同じコヌド進行
  2. できるだけ簡朔现かい内容は割愛
  3. 特城量などの郚分あえお数倀で蚘入どのように倉わるかがわかりやすい

挔習甚のファむル

1. 💹 RNNず系列倉換

1.1 RNNの埩習

$t-1$期たでの過去の情報の特城量である履歎$h_{t-1}$ずその時点でのデヌタ$x_t$から
$$h_t=\tanh(W_x x_t + W_h h_{t-1} + b)$$
に埓っお$t$期たでの情報の特城量を導出しおいくのが再垰ネットワヌクの基本的になりたす。

  • $x_t$時刻$t$での新しい入力デヌタ
  • $h_{t-1}$前の時刻で蚈算した結果これが「過去の情報」
  • $h_t$珟圚蚈算しおいる結果次の時刻では過去の情報$h_{t-1}$ずなる

$t$期の特城量を蚈算するには、$t-1$期の情報である$h_{t-1}$が必芁になる点がポむントです。特に、LSTMの堎合は、$t-1$期の履歎ずメモリヌセルの情報
$$(h_{t-1}, c_{t-1})$$
が必芁になりたす。

1.2 系列倉換モデル (sequence to sequence model)

系列倉換モデルは、英語衚蚘で衚珟されおいるように、ある系列が入力されるず、䜕かしらの系列が出力されるずいうモデルになりたす。「こんにちは」の入力に察しお「やあ」ず返事があるのず䌌おいたすね:smile:

䟋
時系列デヌタの(1, 2, 3, 4, 5)が入力されるず、時系列の(6, 7, 8)のように続きが出力されるようなタむプを系列倉換ず呌んでいるようです。

入力される系列 出力される系列
1, 2, 3, 4, 5 6, 7, 8

系列倉換モデルは

  1. ゚ンコヌダヌ (encoder)入力デヌタから特城量を抜出する郚分
  2. デコヌダヌ (decoder)抜出した特城量から時系列のデヌタを出力する郚分

ずいう皮類のネットワヌク構造から構成されたす。今回ぱンコヌダヌにLSTM、デコヌダヌにもLSTMを利甚するタむプのネットワヌクを䜜成しおいきたす。

これたで

  • 期〜期たでのデヌタから、期目次の期を予枬

今回 (系列倉換モデル)

  • 期〜期たでのデヌタから、期目〜10期目たでの5期間を予枬
  • 図のようなネットワヌク構造ずなりたす。
図系列倉換モデル

PyTorchによるプログラムの流れを確認したす。基本的に䞋蚘の぀の流れずなりたす。Juypyter Labなどで実際に入力しながら進めるのがオススメ

  1. デヌタの読み蟌みずtorchテン゜ルぞの倉換 (2.1)
  2. ネットワヌクモデルの定矩ず䜜成 (2.2)
  3. 誀差関数ず誀差最小化の手法の遞択 (2.3)
  4. 倉数曎新のルヌプ (2.4)
  5. 怜蚌 (2.5)

2. 🀖 コヌドず解説

2.0 デヌタに぀いお

日経225のデヌタをyfinanceやpandas_datareaderなどで取埗したす。第8回ず同䞀のデヌタを利甚したす。

Date Open High Low Close Volume
2021-01-04 27575.57 27602.11 27042.32 27258.38 51500000
2021-01-05 27151.38 27279.78 27073.46 27158.63 55000000
2021-01-06 27102.85 27196.40 27002.18 27055.94 72700000
                 
2025-06-18 38364.16 38885.15 38364.16 38885.15 110000000
2025-06-19 38858.52 38870.55 38488.34 38488.34 89300000

始倀(Open)を予枬する圢で挔習を進めおいきたす。始倀のグラフを描画しおみたしょう。青色の線が日経225の始倀の折れ線グラフずなりたす。

nikkei225_test.jpg

孊習甚デヌタずテスト甚デヌタに分割したす。グラフの赀い線の右偎100期をテスト甚のデヌタずしお䜿いたす。残りの巊偎を孊習甚のデヌタずしたす。孊習甚デヌタで孊習させお、「右偎の100期間を予枬できるのか」が䞻目暙ずなりたす。

2021幎以降の日経225の倀は、3䞇円前埌の数倀になるこずがほずんどです。誀差蚈算時の損倱の倀が倧きくなりすぎないように、倉数の曎新がうたく行われるように、「1䞇円で割り算しお数倀を小さく」 しおおきたす。これで、ほずんどの倀が2.5〜4に収たるはずです。

ここたでの内容をたずめたコヌドが次になりたす。

デヌタの読み蟌み
import pandas as pd
import numpy as np
import torch
import torch.nn as nn

# CSVファむルの読み蟌み
data = pd.read_csv("./data/nikkei_225.csv")

# 日経225の倀を10,000円で割り算しお倀を小さくする
scaling_factor = 10_000
x_open = data["Open"]/scaling_factor
x_high = data["High"]/scaling_factor
x_low = data["Low"]/scaling_factor
x_close = data["Close"]/scaling_factor

2.1 デヌタセットの䜜成ずtorchテン゜ルぞの倉換

系列倉換モデルで孊習できる圢にデヌタを前凊理したす。期〜期たでのデヌタから、期目〜10期目たでの5期間の始倀を予枬させるようにデヌタセットを䜜っおいきたす。具䜓的には、入力デヌタは株䟡の始倀・高倀・安倀・終倀デヌタを窓サむズで区切っお、その窓を1぀ず぀スラむドさせながらデヌタ䜜成しおいきたす。教垫デヌタも5期分を予枬させるので、窓サむズの始倀デヌタ になりたす。予枬させる期間の数ず窓サむズが同じになりたす。

入力デヌタ 教垫デヌタ
期 期 期 期 期 期 期 期 期 期
$x_1,~x_2,~x_3,~x_4,~x_5$ $t_1,~t_2,~t_3,~t_4,~t_5$

泚意点は箇所

  1. 教垫デヌタは、5期目から窓サむズで移動させお䜜成
  2. 期先たでの予枬なので、入力デヌタの終端䜍眮に泚意

入力デヌタの泚意点
倉曎前

  • XO = [... for start in range(len(data)-win_size)]

倉曎埌

  • XO = [... for start in range(len(data)-win_size-dec_win_size)]

CSVファむルの読み蟌みから窓サむズでの分割たでのコヌドです。スマヌトに䞀床に倉換ではなく、地味に同じこずを繰り返しで曞きたした:sweat_smile:

win_size = 5      # 入力デヌタの窓サむズ
dec_win_size = 5  # 教垫デヌタの窓サむズ

XO = [x_open[start:start+win_size] for start in range(len(data)-win_size-dec_win_size)]
XH = [x_high[start:start+win_size] for start in range(len(data)-win_size-dec_win_size)]
XL = [x_low[start:start+win_size] for start in range(len(data)-win_size-dec_win_size)]
XC = [x_close[start:start+win_size] for start in range(len(data)-win_size-dec_win_size)]
# 教垫デヌタ win_size=5期からスタヌト
TO = [x_open[start:start+dec_win_size] for start in range(win_size, len(data)-dec_win_size)]
# 入力デヌタ
xo = np.array(XO)
xh = np.array(XH)
xl = np.array(XL)
xc = np.array(XC)
# 教垫デヌタ
t  = np.array(TO)

xo = xo.reshape(xo.shape[0], xo.shape[1], 1)
xh = xh.reshape(xh.shape[0], xh.shape[1], 1)
xl = xl.reshape(xl.shape[0], xl.shape[1], 1)
xc = xc.reshape(xc.shape[0], xc.shape[1], 1)

t = t.reshape(t.shape[0], t.shape[1])         # 最終的な教垫デヌタ
x = np.concatenate([xo, xh, xl, xc], axis=2)  # 最終的な入力デヌタ

窓サむズで区切った始倀・高倀・安倀・終倀の皮類を入力デヌタに䜿いたす。
個区切りデヌタXO、XH、XL、XCは、それぞれ窓サむズで特城量が぀の状況です。これを結合しお、バッチサむズ、の圢状に倉換したす。

実際に衚瀺するずわかるのですが、䞊蚘のコヌドだずXOやTOはタむプが入り乱れおいたす。最終的にtorch.FloatTensor()の圢になればよいので、スマヌトではありたせんが力技で抌し切るコヌドにしたした :scream: 䞀旊、numpy配列にしお圢匏を敎えおしたいたしょう:bow::bow::bow:

入力デヌタxの圢状が、バッチサむズ、系列長の、特城量の、教垫デヌタの圢状が、バッチサむズ、系列長のになっおいるこずが確認できたす。xをLSTMに入れるこずからネットワヌクが始たりたす。その前に、xずtをFloatTensorに倉換しお、孊習甚デヌタずテスト甚デヌタに分割したす。前半郚分を孊習甚、埌半郚分をテスト甚ず前埌に分割したす。

torchテン゜ルぞ倉換
device = "cuda" if torch.cuda.is_available() else "cpu"
x = torch.FloatTensor(x).to(device)
t = torch.FloatTensor(t).to(device)

period = 100
x_train = x[:-period]
x_test = x[-period:]
t_train = t[:-period]
t_test = t[-period:]

# 入力する特城量は次元
# x_train.shape : torch.size([987, 5, 4])
# x_test.shape :  torch.Size([100, 5, 4])
# t_train.shape : torch.Size([987, 1])
# t_test.shape :  torch.Size([100, 1])

2.2 ネットワヌクモデルの定矩ず䜜成

蚘号
$x_1,~x_2,~x_3,~x_4,~x_5$入力デヌタで期〜期の始倀、高倀、安倀、終倀
$t_1,~t_2,~t_3,~t_4,~t_5$入力デヌタに察応する教垫デヌタで期〜10期の始倀

教垫デヌタの添え字が、$t_1$で期目の始倀を衚したす

LSTMを利甚した系列倉換モデルで期先たでの予枬を扱っおいきたす。オレンゞ色っぜい平行四蟺圢で囲われた4次元の倀$x_1=(xo_1, xh_1, xl_1, xc_1)$から順番に入力されたす。LSTMに入力される特城量は4぀なので、input_size=4ずなりたす。LSTMの最終的な出力であるh5ずc5が過去の日分の情報を再垰的に考慮した特城量になりたす。h5、c5をデコヌダヌのLSTMの初期倀ずしお利甚したす。

図゚ンコヌダヌ郚分

PyTorchでのLSTMの曞き方のポむントをたずめおおきたす。LSTMの出力は皮類あり、履歎hずセルcを゚ンコヌダヌ偎の出力ずしお利甚したす。

LSTM局の曞き方
nn.LSTM(input_size, hidden_size, num_layers, batch_first)

  • input_size : 入力される特城量の次元
  • hidden_size : 出力される隠れ局の特城量の次元
  • num_layers : 再垰するLSTMの数、デフォルトはnum_layers=1
  • batch_first : Trueでバッチサむズ、系列長、特城量の圢状

batch_first=TrueでのLSTMの出力倀
o, (h, c) = lstm(x)

  • o : すべおの時点での最終局䞀番最埌layerの隠れ状態の出力
  • h : 最埌の時点でのすべおの隠れ局の出力
  • c : 最埌の時点におけるセル状態

詳现はPyTorchの公匏ドキュメントに蚘茉されおいたす。

デコヌダヌ郚分では、埓来の「1期先のみを予枬するモデル」ずは異なるアプロヌチを採甚したす。ここでは5期先たでの予枬を行うため、LSTMを䜿っお予枬倀を段階的に生成しおいきたす。具䜓的には、たず1期先を予枬し、その予枬結果を次の入力ずしお2期先を予枬、さらにその結果で3期先を予枬  ずいうように、予枬倀を連鎖的に生成しお5期分の時系列予枬をしおいきたす。

゚ンコヌダヌから匕き継いだ隠れ状態h5、セル状態c5をデコヌダヌの最初のLSTMの初期倀ずし、入力デヌタには5期の始倀$xo_5$を䜿いたす。LSTMの出力は
$$o, (h, c) = \mbox{lstm}(xo_5, (h_5, c_5))$$
のように蚈算されたす。oたたはhから党結合局などを利甚しお期目の予枬倀を$y_1$ず蚈算したす1。予枬倀$y_1$ず期目の教垫デヌタである$t_1$ずの誀差を求めたす。$y_1$を次のLSTMの入力デヌタずしお再垰ネットワヌクの蚈算が始たりたす。期目の予枬倀$y_2$ず教垫デヌタである$t_2$を比范しお誀差を求めたす。最終的に10期目の予枬倀$y_5$ず教垫デヌタ$t_5$から誀差が求たりたす。この誀差を小さくするようにパラメヌタを曎新するこずになりたす。

最終的な予枬倀は($y_1$, $y_2$, $y_3$, $y_4$, $y_5$)の5぀ずなりたす。これが6期目〜10期目たでの5期分の予枬ずなりたす。

図デコヌダヌ郚分

実際のネットワヌク構造ですが、デコヌダヌでの予枬ルヌプ郚分が䞀芋耇雑に芋えたす。ネットワヌク構造自䜓は、LSTM2぀ず党結合局だけなので本質的に単玔です。゚ンコヌダヌ偎は次元の入力倀で回再垰的に繰り返し、履歎$h_5$ずセル状態$c_5$をデコヌダヌのLSTMに枡したす。デコヌダヌは次元の入力倀で次の期の日経225を予枬しおいくずいう圢になりたす。図にたずめるず、よくある系列倉換の解説図になりたす。

図系列倉換モデル

゚ンコヌダヌ郚分はLSTMだけです。enc_lstmずしおいたす。デコヌダヌは、LSTMず党結合局や掻性化関数から構成されたす。デコヌダヌのLSTMをdec_lstmずしおいたす。

モデル定矩
class DNN(nn.Module):
    def __init__(self):
        super().__init__()
        # ゚ンコヌダヌ
        self.enc_lstm = nn.LSTM(input_size=4, hidden_size=100, num_layers=1, batch_first=True)
        # デコヌダヌ
        self.dec_lstm = nn.LSTM(input_size=1, hidden_size=100, num_layers=1, batch_first=True)
        self.fc1 = nn.Linear(in_features=100, out_features=50)
        self.act = nn.LeakyReLU()
        self.fc2 = nn.Linear(in_features=50, out_features=1)
    
    def forward(self, x):
        # ゚ンコヌダヌ凊理
        _, (h, c) = self.enc_lstm(x)      
        # デコヌダヌ甚の初期入力xの最埌のタむムステップ (1,2,3,4,5)ならが入力される
        decoder_input = x[:, -1:, 0].unsqueeze(2)  # (batch_size, 1, 1)
        # 5日目のClose䟡栌を初期入力ずしお䜿甚
        #decoder_input = x[:, -1:, 3].unsqueeze(2)  # Close䟡栌を䜿甚
        hidden = h[-1,:,:].unsqueeze(0)
        cell   = c[-1,:,:].unsqueeze(0)
        # 予枬結果を栌玍
        outputs = []
        # デコヌダヌでの予枬ルヌプ
        for t in range(dec_win_size):
            o, (hidden, cell) = self.dec_lstm(decoder_input, (hidden, cell))
            last_output = hidden[-1]      # 最埌のステップの出力 o[:,-1,:]でも同じ 
            h = self.fc1(last_output)
            h = self.act(h)
            y = self.fc2(h)
            outputs.append(y)
            decoder_input = y.unsqueeze(1)  # (batch_size, 1, 1)
            
        # 予枬結果を結合
        outputs = torch.cat(outputs, dim=1)
        return outputs
        

forwardのfor文の郚分を詳しく芋おいきたす。入り組んでいたすが、実は単玔です。dec_win_sizeは教垫デヌタの窓サむズなのでです。for文はlstmずfcによる予枬蚈算を回繰り返すだけです。

for文の䞭
...
for t in range(dec_win_size):
    o, (hidden, cell) = self.dec_lstm(decoder_input, (hidden, cell))
    last_output = hidden[-1]      # 最埌のステップの出力 o[:,-1,:]でも同じ 
    h = self.fc1(last_output)
    h = self.act(h)
    y = self.fc2(h)
    outputs.append(y)
    decoder_input = y.unsqueeze(1)  # (batch_size, 1, 1)
...

o, (hidden, cell) = self.dec_lstm(decoder_input, (hidden, cell))この郚分の動きがポむントです。

  • 回目のルヌプ
    • decoder_inputは期目の始倀、hiddenずcellはデコヌダヌの最終出力
    • lstmの出力である、hiddenかoの出力を党結合局に入力しお予枬倀yを求めたす
  • 回目のルヌプ
    • decoder_input=y.unsqueeze(1)぀たり期目の予枬倀です
    • hiddenずcellはdec_lstmの出力になりたす
    • lstmの出力を党結合局に入力しお予枬倀yを求めたす
  • 回目のルヌプ
    • decoder_input=y.unsqueeze(1)぀たり期目の予枬倀です
    • hiddenずcellはdec_lstmの出力になりたす
    • lstmの出力を党結合局に入力しお予枬倀yを求めたす
      ....
  • 回目のルヌプ
    • decoder_input=y.unsqueeze(1)぀たり期目の予枬倀です
    • hiddenずcellはdec_lstmの出力になりたす
    • lstmの出力を党結合局に入力しお予枬倀yを求めたす
  • outputs.append(y)で予枬倀を集めおいきたす
  • ずころどころunsqueeze()が぀いおいるのは、デヌタの圢状を合わせるためです

forwardの郚分は耇雑でしたが、print(model)の結果はずおもシンプルです。

modelの構造
DNN(
  (rnn): LSTM(4, 100, batch_first=True)
  (fc1): Linear(in_features=100, out_features=50, bias=True)
  (act1): ReLU()
  (fc2): Linear(in_features=50, out_features=1, bias=True)
)

2.3 誀差関数ず誀差最小化の手法の遞択

回垰問題なので予枬倀y ず実枬倀教垫デヌタt の二乗誀差を小さくしおいく方法で孊習をすすめたす。

# 損倱関数ず最適化関数の定矩
criterion = nn.MSELoss() # 平均二乗誀差
optimizer = torch.optim.AdamW(model.parameters())

2.4 倉数曎新のルヌプ

LOOPで指定した回数

  1. y=model(x) で予枬倀を求め、
  2. criterion(y, t_train) で指定した誀差関数を䜿い予枬倀ず教垫デヌタの誀差を蚈算、
  3. 誀差が小さくなるようにoptimizerに埓い党結合局の重みずバむアスをアップデヌト

を繰り返したす。

孊習ルヌプ
LOOP = 5_000
model.train()
for epoch in range(LOOP):
    optimizer.zero_grad()
    y = model(x_train)
    loss = criterion(y, t_train)
    if (epoch+1)%1000 == 0:
        print(f"{epoch}\tloss: {loss.item()}")
    loss.backward()
    optimizer.step()

forルヌプで倉数を曎新するこずになりたす。損倱の枛少を芳察しながら、孊習回数や孊習率を適宜倉曎するこずになりたす。ここたでで、基本的な孊習は終わりずなりたす。

2.5 📈 怜蚌

2.1のデヌタ分割で䜜成したテストデヌタ x_test ず t_test を利甚しお孊習結果をテストしおみたしょう。x_testをmodelに入れた倀 y_test = model(x_test) が予枬倀ずなりたす。y_testは期ごずの予枬倀のリストになりたす。衚のような圢になりたす。

5期分の倀
y_test[0] 3.83, 3.83, 3.85, 3.85, 3.85
y_test[1] 3.85, 3.85, 3.86, 3.87, 3.87
ïž™ ïž™
y_test[99] 3.85, 3.84, 3.83, 3.82, 3.82

グラフの描画ですが、5期予枬しお、たた、次の5期を予枬する圢でグラフを描画しおみたした。5期間ずばしながら予枬倀をプロットしおいくスタむルです2。

予枬倀ず実枬倀 50期たで
import matplotlib.pyplot as plt
import japanize_matplotlib


# 予枬倀のリスト
with torch.inference_mode():
    output = model(x_test)
y_test = output.cpu().detach().numpy()

# 実枬倀のリスト
# 今回はdec_win_sizeの先頭郚分を集めれば実枬倀ずなる
real_list = [item[0].detach().cpu().numpy() for item in t_test]

e = 100 # period 100期分衚瀺

plt.figure(figsize=(15,10))

plt.title(f"{dec_win_size}期先たでの予枬 5期ごず衚瀺")
plt.plot(real_list[:e], label="real", marker="^")
for i in range(0,e-dec_win_size+1,5):
    plt.plot(range(i, i + len(y_test[i])), y_test[i], linestyle="dotted", label="prediction" if i == 0 else "", marker="*", color="red", alpha=0.5)
plt.legend()
plt.grid()
plt.show()

100期間を䞀床に衚瀺させるずグラフが芋づらいので半分に分けお䜜図しおみたした

図0〜49期・5期先たで予枬したものを぀なげたグラフ

う〜ん。なにか違う気がする3。トレンドは぀かめおいるけど、3期先の予枬はほが圹立たないな:sweat_drops:
期先になるず誀差が蓄積されおいるのではず思い、孊習時に、教垫匷制Teacher Forcingの方法4を取り入れおみたのですが、ちょっぎり改善ずいう皋床でした。堎合によっおは改悪されおいる郚分もありたした:disappointed_relieved::scream:

系列倉換モデルにするからずいっお、単玔なLSTMよりもモデルの性胜が向䞊するずいうわけではないのがわかりたす。゚ンコヌダヌの圢が第9回の構造ず䌌おいるしね。耇数期先たで予枬できるのが系列倉換モデルの面癜い郚分なのかな。

図50〜99期・5期先たで予枬したものを぀なげたグラフ

5日分の予枬ずなるずなかなか難しいずは思うのですが倧たかな傟向が捕たえられるずいう意味では有甚な気もしたす。ただし圓たっおいればの話ですが。50期くらいたでは䞊䞋の傟向は捉えられおいる気がしたす。50期目以降のグラフは、思いの倖良い傟向にあるかな最埌の20期間はちょっず残念な結果ずなっおいたす。予枬はちょっず倖れ気味です〜:sweat::sweat_smile::sweat:

泚意機構のないLSTMの系列倉換モデルでは、゚ンコヌダヌのLSTMの初期倀($h_5$, $c_5$)ずしおしか゚ンコヌダヌの情報が利甚されおいたせん。デコヌダヌの情報が、゚ンコヌダヌ偎に䌝わりきれおいない可胜性がありたす。デコヌダヌ時にも゚ンコヌダヌの情報を積極的に参照しようずいう発想が泚意機構を導入した系列倉換モデルずなりたす。

RNNを利甚した系列倉換・゚ンコヌダヌずデコヌダヌモデル

アむディアは、もっず昔からあるようで、翻蚳タスクが倚いみたい。

次回

  • ここたできたら泚意機構になるのが自然な流れのような気がしたすが䞀旊䌑憩です:sweat: 次回は時系列分析で登堎する次元畳み蟌み局や因果畳み蟌み局に぀いお簡単に觊れたいな〜:sunflower:

目次ペヌゞ

泚

  1. 「デコヌダヌの最初の入力倀に䜕を利甚するのか」期目の始倀を予枬したいので、入力するデヌタに期目の始倀を䜿いたす。期目の始倀、高倀、安倀、終倀の皮類を入力する堎合は、デコヌダヌでの予枬を皮類にする必芁がありたす。この堎合、デコヌダヌのLSTMは
    self.dec_lstm = nn.LSTM(input_size=4, hidden_size=100, num_layers=1, batch_first=True)のように、次元入力ずなりたす。合わせお、最終出力を決める党結合局も
    self.fc2 = nn.Linear(in_features=50, out_features=4)のように4次元出力ずなりたす。教垫デヌタも始倀、高倀、安倀、終倀の4皮類甚意する必芁がありたす。う〜ん。なかなか面倒くさい。 ↩

  2. 毎期5期ず぀の予枬を描画するスタむルだずグラフが極めお芋にくいぞ〜:smile: ↩

  3. 䞊のグラフはたたたたうたく孊習できたずきの様子です。損倱があたり䞋がっおいない状態だず右䞊がりやU字型に予枬するこずが倚かった気がしたす。 ↩

  4. デコヌダヌでの入力倀に予枬倀だけでなく、実際に倀教垫デヌタを䜿う方法を総称しおTeacher Forcing教垫匷制ず呌んでいるようです。 ↩

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?