| CARVIEW |
PyTorch??RNN?N???X??RNNCell?N???X???Ĕ??????悤?F????Ď??????I?@?f?B?[?v???[?j???O?H?쎺?i1/2 ?y?[?W?j
RNN?N???X???ǂ̂悤?ȏ????????Ă???̂????A??????????RNN?N???X???`???Ȃ???A???Ă??????Ƃɂ??܂??B
???̋L???͉??????ł??B????o?^?i?????j????ƑS?Ă????????????܂??B
?@?O????RNN?̊T?v?ƁAPyTorch??????RNN?N???X??p???āA?T?C???g?̐??????s???Ă݂܂????B????́ARNN?N???X??͂????ȑf?ȃN???X???????ō??Ȃ???A???̓???????Ă??????Ƃɂ??܂??傤?B?܂??APyTorch??????RNN?N???X??RNNCell?N???X?͂?荂?x?ŕ??G?ȏ??????s???Ă???̂ŁA???ۂ̃R?[?h?͖{?e?̂??̂Ƃ͂??Ȃ?قȂ??Ă??邱?Ƃɂ͒??ӂ??Ă????????iPyTorch??RNN?N???X??RNNCell?N???X?ł͍ŏI?I?ɂ?Python?ł͂Ȃ??AC++?Ŏ???????Ă???R?[?h???Ăяo????Ă???̂ŁA????͂????܂ł?????????Ȋ????Ƃ??????b?ł??j
?@PyTorch?Ȃǂ̃t???[?????[?N??????N???X??͂????N???X???????ō?邱?Ƃ??u?ԗւ̍Ĕ????v?ƌĂԂ??Ƃ?????܂??B?ԗւ̍Ĕ????́u???ɂ?????̂??܂?????????v?Ƃ??????ƂŁu???ʂȂ??Ɓv?ƍl????ꂪ???ł????A?????ʼn????𗝉????邽?߂ɂ͍Ĕ????????邱?Ƃ????ɗ????Ƃ?????܂??B?v???_?N?V?????R?[?h?ł??????????Ƃ?????̂͊m???ɖ??ʂȂ̂ł????A?????RNN???????łǂ?Ȃ??Ƃ????Ă???̂????????ړI?ōĔ????????Ă݂܂??傤?B
?????ō??RNN?N???X
?@?O??́APyTorch??????RNN?N???X?𗘗p???āA???̂悤?ȃj???[?????l?b?g???[?N?N???X???L?q???܂????B
class Net(torch.nn.Module):
def __init__(self, input_size, hidden_size):
super().__init__()
self.rnn = torch.nn.RNN(input_size, hidden_size)
self.fc = torch.nn.Linear(hidden_size, 1)
def forward(self, x, hidden):
output, h = self.rnn(x, hidden)
output = self.fc(output[:, -1])
return output, h
?@????A?ڎw???̂͏?̃v???O?????ɂ???uself.rnn = torch.nn.RNN(input_size, hidden_size)?v?Ƃ????s???uself.rnn = MyRNN(input_size, hidden_size)?v?̂悤?ɒu???????邱?Ƃł??B
?@?O??Ɍ????ʂ?APyTorch?????Ă???RNN?N???X?́A???n??f?[?^?i?????ł̓T?C???g???`??????25?̒l?j?̃V?[?P???X?i?܂?A?????̎??n??f?[?^?j????C?ɏ??????Ă???܂??B
?@?????ō???́ARNN?N???X?̓?????????ق????Ȃ???A2?̃N???X???`???邱?Ƃɂ??܂??B?T?C???g???\??????f?[?^?Z?b?g?̐?????A?w?K?^?]???Ɋ֘A????R?[?h?͊?{?I?ɂ͑O??ƕς??܂???B?????ŁA?ŏ??Ƀf?[?^?Z?b?g??????R?[?h???ȉ??Ɏ????Ă????܂??B?Ȃ??A????̃R?[?h?????̃m?[?g?u?b?N?Ō??J???Ă???̂ŁA?K?v?ɉ????ĎQ?Ƃ??Ă????????B
import numpy as np
import matplotlib.pyplot as plt
import torch
from random import uniform
def make_data(num_div, cycles, offset=0):
step = 2 * np.pi / num_div
res0 = [np.sin(step * i + offset) for i in range(num_div * cycles + 1)]
res1 = [np.sin(step * i + offset) + uniform(-0.02, 0.02) for i in range(num_div * cycles + 1)]
return res0, res1
def make_train_data(num_div, cycles, num_batch, offset=0):
x, x_w_noise = make_data(num_div, cycles, offset)
count = len(x) - num_batch
data = [x_w_noise[idx:idx+num_batch] for idx in range(count)]
labels = [x[idx+num_batch] for idx in range(count)]
num_items = len(data)
train_data = torch.tensor(data, dtype=torch.float).reshape(num_items, num_batch, -1)
train_labels = torch.tensor(labels, dtype=torch.float).reshape(num_items, -1)
return train_data, train_labels
?@?w?K?^?]???Ɏg???R?[?h?͌?قǁA?Љ?܂??i???A???ɏq?ׂ??ʂ?A?O??̃R?[?h?Ƃقړ????ł??j?B
?@?????ō쐬????MyRNN?N???X?ł́A?ǂ?ȏ????????Ȃ???Ȃ?Ȃ?????????????Ǝ????܂??B
- ???n??f?[?^?̃V?[?P???X???A?V?[?P???X???Ɓi?ЂƂ܂Ƃ܂?̎??n??f?[?^???Ɓj??RNN?ŏ???????
- ?ЂƂ????܂?̎??n??f?[?^?ɂ??ẮA??????\??????X?̃f?[?^???????j???[?????l?b?g???[?N?ɓ??͂??A???̃T?C???g?̒l?𐄑??i?ł???悤?Ɋw?K?j
?@?O???1??????100?????????A2???????̃f?[?^???쐬???܂????i?v200?{?Ō??1?????Ă??܂????j?B
?@?ЂƂ????܂?̎??n??f?[?^??25?̒l?ō\??????Ă????̂Łi?o?b?`?T?C?Y??25?j?A?V?[?P???X?̐??́u201?|25??176?v?ł??B
?@?v????ɁAMyRNN?N???X??25?̐??l?ō\??????鎞?n??f?[?^?i?Ɗw?K???ɂ͑Ή????鐳?????x???j???A176???A??????RNN?ŏ??????Ă???Ƃ??????Ƃł??B
?@?܂??A?B???Ԃ̃T?C?Y?Ƃ??Ă͑O??́u32?v???w?肵?Ă??????Ƃ??v???o???Ă????????B????ɍ??킹?āARNN?N???X?̃C???X?^???X?ɂ͍??q?ׂ?176?̃V?[?P???X?ƉB???Ԃ̏????l??n???Ă????܂????i?uself.rnn = torch.nn.RNN(input_size, hidden_size)?v??input_size??1?Ahidden_size=32?j?B
?@?ȏオ?????悻?̑O??ƂȂ?܂??B????ł́AMyRNN?N???X?̒?`?????Ă????܂??傤?B
MyRNN?N???X
?@??ŏq?ׂ??悤?ɁAPyTorch??RNN?N???X?͕??G?ȏ??????ЂƂ܂Ƃ߂Ɏ??s???Ă???܂????A???̈???ŁARNN?w?ōs???u???n??f?[?^??1????????āA?v?Z???s???A???̌??ʂ??o?͂???v?Ƃ????N???X??PyTorch?ł͒???Ă??܂??B???ꂪ?ARNNCell?N???X?itorch.nn.RNNCell?N???X?j?ł??B
?@???̃N???X?ł́ARNN?N???X?Ɠ??l?ɁA???̃C???X?^???X???????Ɂu???̓T?C?Y?v?Ɓu?B???Ԃ̃T?C?Y?v??2?̈??????w?肵?܂??i?o?C?A?X?̗L???A?????????̎?ނȂǂ??w??ł??܂????A?{?e?ł̓f?t?H???g?̂܂܂Ƃ??܂??j?B
?@?????RNN?N???X?Ɠ??l?ł????A???̃N???X?̃C???X?^???X???Ăяo???Ƃ??ɂ́A1?̎??n??f?[?^?ƉB???Ԃ̏????l??n???܂??B???????ARNN?N???X?Ƃ͈قȂ?A???̖߂?l??1?̎??n??f?[?^?????????????ʁA???Ȃ킿?A???݂̉B???Ԃ?\???e???\???݂̂ƂȂ?܂??B
?@?????ʼnB???Ԃɂ??ď????b?????Ă????܂??傤?B
?@?B???ԂƂ́ARNN?ɓ??͂???鎞?n??f?[?^?̈??ɂ??đ??݂??܂??B?O???č???͎??n??f?[?^??25?̐??l?ō\?????????̂Ƃ??Ă??܂??B?B???Ԃ̃T?C?Y?????l?ɁA?O??ƍ????32?Ƃ??Ă??܂??B?܂?A25?̃f?[?^?̂??ꂼ??ɂ??āA???̃f?[?^?????????????_?ł̉B???Ԃ?\??32?̃f?[?^?A?܂?A???v??25?~32?Ƃ????T?C?Y?̃e???\???????݂???Ƃ??????Ƃł??iRNN?̎?@?ɂ???ẮA?u?B???Ԃ̃T?C?Y??3?{?A4?{?v?ȂǁA??葽???̃f?[?^?ʼnB???Ԃ?\?????邱?Ƃ?????܂??j?B???????u????t-1?At?A?c?c?ɂ?????B???ԁv?Ȃǂƕ\?????邱?Ƃ?????ł??傤?B
???n??f?[?^?̗v?f???i?o?b?`?T?C?Y?j??25?A?B???Ԃ̃T?C?Y??32???Ɓu25?~32?v?T?C?Y?̃e???\?????g???āA???͂??Ƃ̉B???Ԃ??Ǘ???????@?????āA???̉B???Ԃ??A?ȍ~?̃f?[?^????Ɍv?Z????ۂɊ֗^?????邱?ƂŁi?B???Ԃɑ??ėp????d?݂?o?C?A?X???p?ӂ???Ă??܂??j?A???n??f?[?^?Ɋ܂܂?邠??l?ƈȍ~?̒l?Ƃ??֘A?????i?e??????j?悤?ɂȂ??Ă??܂??B
?@?????ŏ????C?ɂȂ?̂́A??ł??q?ׂ??ʂ?ARNN?N???X?ł͂??̃C???X?^???X???Ăяo???ƁA2?̒l???߂???Ă??????Ƃł??B?Ⴆ?A?uoutput, hidden = net(X_train, hidden)?v?̂悤??Net?N???X?̃C???X?^???X????āARNN?N???X?̃C???X?^???X???Ăяo?????Ƃ??܂??傤?B???̂Ƃ??Ahidden?ɂ́A?S?Ă̎??n??f?[?^?i????Ȃ??176?j?̏????????????????_?ł̉B???Ԃ??Ԃ???܂??iRNNCell?N???X?̃C???X?^???X???߂??l?Ɠ??l?j?B???āAoutput?ɂ͑S?Ă̎??n??f?[?^?????????邲?Ƃɓ???ꂽ?B???Ԃ??S?Ċ܂܂?Ă??܂??B
?@RNNCell?N???X?ł́A??x??1?̎??n??f?[?^?݂̂?????????̂ŁA??????B???Ԃ?1?????ł????ARNN?N???X?͊???̎??n??f?[?^?i?V?[?P???X?j??????????̂ŁA???̐??????B???Ԃ?????A???????ЂƂ܂Ƃ߂ɂ??????̂??ŏI?I?ȏo?͂ƂȂ??Ă???Ƃ??????Ƃł??B
?@?t?ɂ????ƁARNNCell?N???X???g???āA?S?Ă̎??n??f?[?^??????????Ƃ??ɂ́A?߂?l?ł???B???Ԃ??A?ۑ????Ă????āA?Ō?ɂ????Ԃ??悤?ɂ???K?v??????Ƃ??????Ƃł??B
?@?Ƃ????킯?ŁARNNCell?N???X???g?p????MyRNN?N???X?̃R?[?h???ȉ??Ɏ????܂??B
class MyRNN(torch.nn.Module):
def __init__(self, input_size, hidden_size):
super().__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.rnncell = torch.nn.RNNCell(input_size, hidden_size)
def forward(self, x, hidden):
count = len(x) # sequence length
output = torch.Tensor()
for idx in range(count):
hidden = self.rnncell(x[idx], hidden)
output = torch.cat((output, hidden))
output = output.reshape(len(x), -1, self.hidden_size)
return output, hidden
?@__init__???\?b?h?ł́A???̓T?C?Y?i???????A????͍????1?̐??l?????Ȃ̂ŁA1?Ɍ??܂??Ă??܂????j?ƉB???Ԃ̃T?C?Y???p?????[?^?[?Ɏ??A??????C???X?^???X?ϐ??ɕۑ???????i???????Aself.input_size?͖??g?p?j?A???????w?肵?āARNNCell?N???X?̃C???X?^???X?????A??????C???X?^???X?ϐ?self.rnncell?ɑ?????Ă??܂??B
?@forward???\?b?h?ł́A???n??f?[?^????????̂??𐔂??āi?????ł?176?ɂȂ?܂??j?A???̐?????for???Ń??[?v???????s???Ă??܂??B???[?v?̓????ł́A?p?????[?^?[x?Ɏ?????S?Ă̎??n??f?[?^????X?̎??n??f?[?^?????o???āA?B???Ԃ̏????l?i?p?????[?^?[hidden?Ɏ????́j?Ƌ???RNNCell?N???X?̃C???X?^???X?ɓn???āA?v?Z???s???Ă??܂??B???̖߂肪1?̎??n??f?[?^?????????I????????_?ł̉B???ԂƂȂ?܂??B
?@???̂悤?ɂ??ĕԂ??ꂽ?B???Ԃ́Atorch.cat???\?b?h?ŁA?S?ẲB???Ԃ?ۑ????邽?߂̃e???\???ł???output?֒lj????Ă????܂??B????ɂ??A????͑S?Ă̎??n??f?[?^?̏??????????????ۂɂ́u176?~25?~32?v?Ƃ????T?C?Y?̃e???\?????ł???????܂??i?Ō?ɁAreshape???\?b?h?ł????Ȃ?悤?Ƀe???\???̌`????ύX???Ă??܂??j?B
?@?ł́A????MyRNN?N???X???g???āA?O???Net?N???X???????????Ă݂܂??傤?B
class Net(torch.nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.rnn = MyRNN(input_size, hidden_size)
self.fc = torch.nn.Linear(hidden_size, output_size)
def forward(self, x, hidden):
output, h = self.rnn(x, hidden)
output = self.fc(output[:, -1])
return output, h
?@?Ƃ????Ă??A?R?[?h?͑O??̂??̂Ƃقړ????ŁAPyTorch??????RNN?N???X?̑????MyRNN?N???X???g???Ă??邾???ł??B
Copyright© Digital Advantage Corp. All Rights Reserved.
?A?C?e?B???f?B?A????̂??m?点
??IT eBook
?ҏW??????̂??m?点
RSS?ɂ???
?A?C?e?B???f?B?AID?ɂ???
???[???}?K?W???o?^
??IT?̃??[???}?K?W???́A ???????A???ׂĖ????ł??B???Ѓ??[???}?K?W???????w?ǂ????????B
ITmedia?̓A?C?e?B???f?B?A??????Ђ̓o?^???W?ł??B
???f?B?A?ꗗ | ????SNS | ?L???ē? | ???₢???킹 | ?v???C?o?V?[?|???V?[ | RSS | ?^?c??? | ?̗p??? | ??????


?O??쐬?????T?C???g?i?m?C?Y?Ȃ??j



