CARVIEW |
PyTorch??DCGAN??????Ă݂悤?F????Ď??????I?@?f?B?[?v???[?j???O?H?쎺?i1/2 ?y?[?W?j
PyTorch??????Conv2d?N???X??ConvTranspose2d?N???X???g????DCGAN?????????Ȃ???A???̓????????Ă????܂??傤?B
?ڎ?
????̖ړI
?@?O???͑S?????^?̃j???[?????l?b?g???[?N??p???āAGAN???\?????܂????B??ނɑI?̂?MNIST?̎菑???????ł??B???????A???̌??ʂ͂??܂?F???????̂ł͂???܂???ł????B
?@?????ŁA????́uCNN?Ȃ?ĕ|???Ȃ??I?@???̊?{?????Ă݂悤?v??uPyTorch?ŏ?ݍ??݃I?[?g?G???R?[?_?[??????Ă݂悤?v?ȂǂŎ??グ????ݍ??݃j???[?????l?b?g???[?N?𗘗p???āAGAN???\?z???Ă݂邱?Ƃɂ??܂??B
?@???ۂ̍\???́A???̂悤?ɂȂ?܂??B?ȉ??ł?Conv2d?N???X??ConvTranspose2d?N???X?݂̂??܂߂Ă???܂????ABatchNorm2d?N???X?????torch.nn???W???[???????銈???????N???X?itorch.nn.Sigmoid?N???X?Atorch.nn.Tanh?N???X?j???g?p???܂??B?P???f?[?^?ƋU???̃f?[?^?̎??ʂƋU???f?[?^?̐????̒??S?I?ȏ????͂????2?̃N???X???????????Ƃ??????Ƃł??B
?@???ʊ?i?f?B?X?N???~?l?[?^?[?j?ł́ACNN?Ŏg?p????Conv2d?N???X?ɂ??P???f?[?^????ѐ?????i?W?F?l???[?^?[?j??????͂??ꂽ?f?[?^???ŏI?I??0?`1?̒l?ւƕϊ????Ă????܂??i??ݍ??݂͂????Ŏg?p?j?B??????̑??ł́uPyTorch?ŏ?ݍ??݃I?[?g?G???R?[?_?[??????Ă݂悤?v?ŏЉ???f?R?[?_?[?Ɠ??l??ConvTranspose2d?N???X??p???āA?????_???Ȓl?i???ݕϐ??j????MNIST?̎菑???????Ƃ??Ď??ʊ?????܂???悤?ȃf?[?^?????܂??i?]?u??ݍ??݁j?B
?@???̂悤?ȏ?ݍ??ݑw???g???č쐬?????GAN?̂??Ƃ?DCGAN?iDeep Convolutional Generative Adversarial Networks?j?ƌĂт܂??BDCGAN??2016?N?ɁuUnsupervised Representation Learning With Deep Convolutional Generative Adversarial Networks?v?Ƃ????_???Œ??ꂽ???̂ł??B
?@?ȉ??ł́A???ʊ?Ɛ?????̍\???????????ς??Ȃ???A?悢?????̉摜???ł??邩???????Ă݂邱?Ƃɂ??܂??傤?B
?R?[?h?̏Љ?
?@????̃R?[?h?S?̂????̃m?[?g?u?b?N?Ō??J???A?????̃R?[?h?͗?ɂ???Ė{?e?????ɂ܂Ƃ߂Čf?ڂ??܂????A??ł??q?ׂ??悤?ɍ???͎??ʊ?Ɛ?????̍\???????x???ύX???Ă݂邽?߂ɁA?????????邽?߂̒??^?Ƃ??Ď??̃N???X???`???܂????B
class MakeFrom(nn.Module):
def __init__(self, s):
super().__init__()
self.model = s
def forward(self, x):
return self.model(x)
?@???̃N???X?́A?C???X?^???X????????PyTorch??Sequential?N???X?̃C???X?^???X????邱?Ƃ?O???ɒu???Ă??܂??BSequential?N???X?ɂ??ẮuPyTorch??CIFAR-10??????????I?[?g?G???R?[?_?[??????Ă݂悤?v?Ȃǂł????グ?܂??????A???̃C???X?^???X???????Ɉ????Ƃ??ė^????ꂽPyTorch??1?ȏ?̃l?b?g???[?N???W???[????????Ɋi?[????R???e?i?̂悤?Ȃ??̂ł??B???MakeFrom?N???X??forward???\?b?h?ł́A?C???X?^???X?ϐ?self.model?Ɋi?[?????????̃l?b?g???[?N???W???[???????????s???邾???ƂȂ??Ă??܂??B
?@?Ⴆ?A???̂悤?Ȏg?????????܂??B
discriminator = nn.Sequential(
nn.Conv2d(1, 8, 5, 2, bias=False),
nn.LeakyReLU(0.2),
nn.Conv2d(8, 16, 5, 2, bias=False),
nn.LeakyReLU(0.2),
nn.Conv2d(16, 32, 3, bias=False),
nn.LeakyReLU(0.2),
nn.Conv2d(32, 1, 2, bias=False),
nn.Sigmoid()
)
netD = MakeFrom(discriminator)
?@???̗?ł́ASequential?N???X?̃C???X?^???X???????ɁA?j???[?????l?b?g???[?N???\??????e??N???X?̃C???X?^???X???i???s?????????ԂɁj?J???}???ŕ??ׂĂ??܂??B?????āA?ł????C???X?^???Xdiscriminator???w?肵??MakeFrom?N???X?̃C???X?^???X???쐬???邱?ƂŁA???ʊ?Ƃ??ē??삷??I?u?W?F?N?g?Ă???Ƃ??????Ƃł??B
?@?܂??A?\????ς??Ȃ???j???[?????l?b?g???[?N???f???????x?????????邽?߁A?P?????s???????????ɂ܂Ƃ߂܂????B?ȉ??ɂ??̊????????܂??B
def train(netD, netG, batch_size, zsize, epochs, trainloader):
losses_netD = []
losses_netG = []
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
netD = netD.to(device)
netG = netG.to(device)
one_labels = torch.ones(batch_size).reshape(batch_size, 1).to(device)
zero_labels = torch.zeros(batch_size).reshape(batch_size, 1).to(device)
criterion = nn.BCELoss().to(device)
optD = optim.Adam(netD.parameters(), lr=0.0002, betas=[0.5, 0.999])
optG = optim.Adam(netG.parameters(), lr=0.0002, betas=[0.5, 0.999])
for epoch in range(1, epochs+1):
running_loss_netD = 0.0
running_loss_netG = 0.0
for count, (real_imgs, _) in enumerate(trainloader, 1):
netD.zero_grad()
# ???ʊ?̊w?K
real_imgs = real_imgs.to(device)
# ?f?[?^???[?_?[????ǂݍ??f?[?^?????ʊ?ɓ??͂??A???????v?Z
output_from_real = netD(real_imgs).reshape(batch_size, -1)
loss_from_real = criterion(output_from_real, one_labels)
loss_from_real.backward()
# ?????킩?瓾???f?[?^???A???ʊ?ɓ??͂??A???????v?Z
z = torch.randn(batch_size, zsize, 1, 1).to(device)
fake_imgs = netG(z).to(device)
output_from_fake = netD(fake_imgs.detach()).reshape(batch_size, -1)
loss_from_fake = criterion(output_from_fake, zero_labels)
loss_from_fake.backward()
# ???????܂Ƃ߂????̂??ŏI?I?ȑ???
loss_netD = loss_from_real + loss_from_fake
optD.step()
running_loss_netD += loss_netD
# ??????̊w?K
netG.zero_grad()
z = torch.randn(batch_size, zsize, 1, 1).to(device)
fake_imgs = netG(z).to(device)
output_from_fake = netD(fake_imgs).reshape(batch_size, -1)
loss_netG = criterion(output_from_fake, one_labels)
loss_netG.backward()
optG.step()
running_loss_netG += loss_netG
running_loss_netD /= count
running_loss_netG /= count
print(f'epoch: {epoch}, netD loss: {running_loss_netD}, netG loss: {running_loss_netG}')
losses_netD.append(running_loss_netD)
losses_netG.append(running_loss_netG)
if epoch % 10 == 0:
z = torch.randn(batch_size, zsize, 1, 1).to(device)
generated_imgs = netG(z).cpu()
imshow(generated_imgs[0:8].reshape(8, 1, 28, 28))
return losses_netD, losses_netG
?@train???̃R?[?h???̂́A?O??Ɍ??????̂Ƃ???قǕς??܂???B?S?????^?̃j???[?????l?b?g???[?N?ł͂Ȃ??A??ݍ??݂??g?p????̂ŁA????ɍ??킹???R?[?h?̏C?????s???????x?ł??i?œK???A???S???Y???̑I????A???????x???ƂȂ?f?[?^?̍쐬?AGPU???g???邩?ǂ????̔???Ƃ???ɑΉ??????????Ȃǂ??????Ɋ܂߂?悤?ɂ??܂????j?B
?@?ׂ??????Ƃ͂Ƃ??????Ƃ??āA?v????ɏ?Ō???MakeFrom?N???X???g???A???ʊ?Ɛ?????????????A??{?I?ɂ͏??train?????Ăяo???????ŌP?????ł???悤?ɂȂ??Ă???Ƃ????킯?ł??B
?@?Ƃ????킯?ŁA?܂??̓V???v????Conv2d?N???X??ConvTranspose2d?N???X?݂̂ō\???????V???v???Ȏ??ʊ?Ɛ??????????Ă݂܂??傤?B
?V???v???Ȏ??ʊ?Ɛ?????
?@???ʊ?̃R?[?h?͎??̒ʂ?ł??i?ȉ??ł?PyTorch?̃h?L???????g?uDCGAN Tutorial?v?ɍ??킹?āAConv2d?N???X??ConvTranspose2d?N???X?̃C???X?^???X?????ł?bias=False???w?肵?āA?o?C?A?X?????????Ȃ??悤?ɂ??Ă??܂??B?????̂?????́A?o?C?A?X?????????Ă݂܂??傤?j?B
discriminator = nn.Sequential(
nn.Conv2d(1, 8, 5, 2, bias=False),
nn.LeakyReLU(0.2),
nn.Conv2d(8, 16, 5, 2, bias=False),
nn.LeakyReLU(0.2),
nn.Conv2d(16, 32, 3, bias=False),
nn.LeakyReLU(0.2),
nn.Conv2d(32, 1, 2, bias=False),
nn.Sigmoid()
)
netD = MakeFrom(discriminator)
?@???̃R?[?h????́A???ʊ킪4?̑w?ō\??????邱?Ƃ???????܂??B?e?w?ł?Conv2d?N???X?i?̂݁j??p???āA???͂??ꂽ?f?[?^??i?K?I?ɍ팸???āA?ŏI?I??0?`1?͈̔͂̒l??1?????o?͂??܂??i???????A?Ō?̊????????Ƃ???PyTorch??Sigmoid?N???X???g???Ă???̂́A?o?͂?0?`1?͈̔͂Ƃ??邽?߂ł??j?BLeaky ReLU?????g?p???Ă???̂́A??قǏЉ???_???̒??ŁuLeaky ReLU???????????Ɏg????v?Ƃ?????????ł??B
?@?i?K?I?Ƀf?[?^???팸????Ă????l?q?́A????̃R?[?h???܂??m?[?g?u?b?N???Q?l?ɂ??Ă????????iConv2d?N???X?̃C???X?^???X?ɍ쐬???āA?????Ƀ????_???ȃf?[?^??^???Ăǂ̂悤?ɂ??čŌ?̏o?͂?1?̃f?[?^?ɂȂ邩???m?F????R?[?h??????܂??j?B
?@?????MNIST?̎菑??????????͂???ƁA?ȉ??̂悤?ȏo?͂??????܂??B
?@?????ł?MNIST?̎菑????????ǂݍ???ŏ????????Ă???̂ŁA?o?͂?1?i???????j?ƂȂ?悤?Ɋw?K?????Ă????A?Ƃ????̂͑O??Ɍ????ʂ?ł??B?܂??A???̉摜???番????ʂ?A???ʊ킩??̏o?͂?1?????̗v?f???i?[????[???l?X?g?????e???\???ƂȂ??Ă???̂ŁAtrain???̓????ł?reshape???\?b?h?Ŕz??̃l?X?g????菜???Ă??܂??B
?@??????̃R?[?h?͎??̂悤?ɂȂ?܂??B
zsize = 100
feature_maps = 16
generator = nn.Sequential(
nn.ConvTranspose2d(zsize, feature_maps * 4, 4, 1, 0, bias=False),
nn.ReLU(),
nn.ConvTranspose2d(feature_maps * 4, feature_maps * 2, 4, 2, 1, bias=False),
nn.ReLU(),
nn.ConvTranspose2d(feature_maps * 2, feature_maps, 4, 2, 1, bias=False),
nn.ReLU(),
nn.ConvTranspose2d(feature_maps, 1, 2, 2, 2, bias=False),
nn.Tanh()
)
netG = MakeFrom(generator)
?@??????ł́AConvTranspose2d?N???X??p???āA???̓f?[?^?izsize??100?̃????_???Ȓl?j??i?K?I?Ɋg?債?āA28?~28??784?????̃f?[?^?ƂȂ?悤?ɂ??Ă??邾???ł??B??????̊????????Ƃ???ReLU???g???Ă???̂????_???ɍ??킹?????̂ł??B
?@???????č쐬??????????Ƀ????_???ȃf?[?^??^???Ă݂????ʂ??ȉ??ł??B
?@?܂??????w?K?????Ă??Ȃ??̂ŁA?O???[?̉摜?ƂȂ?܂????B?w?K?ɂ???āA???̃O???[?摜??MNIST?̎菑?????????ۂ??Ȃ?悤?ɂ???̂?????i?O??j?̖ړI?ł??B
?@???ۂɊw?K???s???ɂ́A??قǂ??q?ׂ??悤??train?????Ăяo???????ł??B
EPOCHS = 80
losses_netD, losses_netG = train(netD, netG, batch_size, zsize, EPOCHS, trainloader)
?@train???ɓn???Ă???????͏?ō쐬????2?̃j???[?????l?b?g???[?N???f???A?f?[?^???[?_?[?????x?ɓǂݍ??ރ~?j?o?b?`?̃T?C?Y?ibatch_size??100?j?A?摜??????ۂɊ?ƂȂ???ݕϐ??̗v?f???izsize??100?j?A?w?K???s???G?|?b?N???iEPOCHS??80?j?A?f?[?^?ǂݍ??݂Ɏg?p????f?[?^???[?_?[?itrainloader?j?ƂȂ??Ă??܂??B
?@???s???ʂ͎??̂悤?ɂȂ?܂????B?????ł͊???̉摜???????o???Ă????????܂??i???̌?͊w?K???I???????Ő??????ꂽ???̂????Ƃ??܂??j?B
?@????ɂ?????ۂ??摜?ƂȂ??Ă???̂???????܂??B????A?O??̑S?????^??GAN?Ő????????͎̂??̂悤?Ȃ??̂ł????i?ꕔ???j?B
?@?ǂ??炪?悢???ƕ????ꂽ??A?????DCGAN?̕??ł͂Ȃ??ł??傤???B?Ƃ͂????A????قǃL???C?ȉ摜?Ƃ??????܂???B?????ł????????H?v?????Ă݂܂??B
Copyright© Digital Advantage Corp. All Rights Reserved.
?A?C?e?B???f?B?A????̂??m?点
??IT eBook
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??? | ??????