トップ «前の日(12-17) 最新 次の日(12-19)»

2019-12-18 (We)

_ PyTorch で RNN

やっとできた。ついでに GPU に載せた。

#!/usr/bin/env python

import torch
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import math
import random
import matplotlib.pyplot as plt

hidden_size = 8
seqlen = 8
batch_size = 128
n_epoch = 1000

N_PIE = 128
N_ROUND = 16

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.rnn = nn.RNN(input_size=2, hidden_size=hidden_size, batch_first=True)
        self.fc1 = nn.Linear(hidden_size, 2)

    def forward(self, x):
        h0 = torch.zeros(1, x.size(0), hidden_size).to('cuda')
        output, hn = self.rnn(x, h0)
        x = self.fc1(output[:,x.size(1) - 1,:])
        return x

net = Net().to('cuda')

criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.1, momentum=0.9)

def calc_point(no, noisy):
    theta = math.pi * 2 / N_PIE * no
    x = math.cos(theta)
    y = math.sin(theta)
    if noisy:
        x += random.random() * 0.4 - 0.2
        y += random.random() * 0.4 - 0.2
    return (x, y)

def make_seq(beg, size, noisy=False):
    seq = [ calc_point(no, noisy) for no in range(beg, beg + size) ]
    return (seq, calc_point(beg + size, noisy))

inputs = []
expecteds = []
for i in range(N_PIE * N_ROUND):
    seq, expected = make_seq(i, seqlen, True)
    expecteds.append(expected)
    inputs.append(seq)

inputs = torch.tensor(inputs).to('cuda')
expecteds = torch.tensor(expecteds).to('cuda')

for epoch in range(n_epoch):
    perm = torch.randperm(inputs.size(0)).to('cuda')

    beg = 0
    while beg + batch_size < inputs.size(0):
        batch = perm[beg:beg+batch_size]

        # zero the parameter gradients
        optimizer.zero_grad()

        # forward + backward + optimize
        outputs = net(inputs[batch])
        loss = criterion(outputs, expecteds[batch])
        loss.backward()
        optimizer.step()

        beg += batch_size

    print(epoch, loss.item())

print('Training finished.')


seq, _ = make_seq(0, seqlen)

xs = []
ys = []
for n in range(1024):
    outputs = net(torch.tensor([seq]).to('cuda'))
    x = outputs[0][0].item()
    y = outputs[0][1].item()
    print('%.4f %.4f' % (x, y))
    xs.append(x)
    ys.append(y)
    seq = seq[1:]
    seq.append([x, y])

plt.plot(xs, ys)
plt.savefig('test.png')

円周を N_PIE 個に分割し、seqlen 個の連続した点から次の点を予測する。 古い点を捨てながら新しい点を追加しながらこれを連続してやれば、 綺麗な円が描けるはず。

というプログラム。結果は↓これ。

PyTorch で RNN

若干歪んでるけど、できた。 むしろ、何周もしてるはずなのに線が多重に見えないのが不思議なくらい。 何か間違ってるのか?

GPU 使用率は 25% くらい。低すぎる。

で、これではまだ私のやりたいことができてないので、更に続く。

↓次回用メモ。

https://stackoverflow.com/questions/49466894/how-to-correctly-give-inputs-to-embedding-lstm-and-linear-layers-in-pytorch

_ TE-D01g 快調

昨日書いた、TE-D01g の問題

類似機種の症例報告の中で、妙なものがあった。

白点滅になってるやつを、充電器の左右反対側に一旦置くと、治ったという。

えー? なんだそりゃ… と思いつつ、昨夜、私も試してみた。

それ以来、快調。

意味わからん…


2021-12-18 (Sa)

_ pgtk

feature/pgtk が master にマージされた!!


2022-12-18 (Su)

_ 原神

「伽藍に落ちて」クリア。

名前付けイベント、この中にあったのね。なるほど。

っつっても、名前なんてそう簡単に思いつかないので、 手持ちの中から付けておいた。

アイテムがあるので、1回は変更できる、ってことかな。 親切設計やな。


2023-12-18 (Mo)

_ 原神

水曜から綾華ガチャが始まるわけだが…

天井80として、綾華ガチャ始まるまでに、天井4回分にちょっと足りない。 十数連くらい足りない。ガチャ期間の間に貯まりそうな感じ。 そもそも、80 行くまでに一人出てくれることを祈りたいが…

_ Ys9

必須クエストと、あと開けてなかった宝箱の開封。

宝箱、めっちゃ地道やわ。なにせ、一度は近くを通って諦めたものだから、 つまり取りにくいんだよね…


2024-12-18 (We)

_ ヤマトの通知が来た

あれ? 今まで、Amazon からの荷物はヤマトから通知が来なくて、 「そういうもの」として諦めてたのに、今日は来てるわ。

なおったのかな。

_ 鳴潮 - 音骸収集

星の少なかった音骸を集中的に収集しなおし。

新しい音骸を吸収しても、星が変わらないことがあった。 成功率パラメータがあるので、失敗したのか?

datadock Lv11。 星4が吸収できるようになったみたい? いや、データドックは英語では Data Bank なのか。ほえー

アンドリアスみたいなのが倒せない…


追記 パスワード変更