code:gpt_example
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
code:gpt_example [2020/08/21 15:23] – rex8312 | code:gpt_example [2024/03/23 02:42] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== | + | ====== |
* 참고 | * 참고 | ||
줄 41: | 줄 41: | ||
parser.add_argument(' | parser.add_argument(' | ||
parser.add_argument(' | parser.add_argument(' | ||
+ | parser.add_argument(' | ||
return parser.parse_args() | return parser.parse_args() | ||
줄 119: | 줄 120: | ||
self.block_size = block_size | self.block_size = block_size | ||
- | self.we = nn.Linear(input_dims, | + | self.we = nn.Linear(input_dims, |
self.wp = nn.Parameter(torch.zeros(1, | self.wp = nn.Parameter(torch.zeros(1, | ||
self.blocks = nn.Sequential(*[ | self.blocks = nn.Sequential(*[ | ||
줄 126: | 줄 127: | ||
]) | ]) | ||
self.norm = nn.LayerNorm(self.d_model) | self.norm = nn.LayerNorm(self.d_model) | ||
- | self.wd = nn.Linear(self.d_model, | + | self.wd = nn.Linear(self.d_model, |
self.apply(self._init_weights) | self.apply(self._init_weights) | ||
줄 163: | 줄 164: | ||
self.data = self.data.astype(np.float32) | self.data = self.data.astype(np.float32) | ||
self.data = self.data.reshape(-1, | self.data = self.data.reshape(-1, | ||
+ | self.data_std = self.data.std(0) | ||
self.repeat = repeat | self.repeat = repeat | ||
self.noise_scale = noise_scale | self.noise_scale = noise_scale | ||
줄 174: | 줄 176: | ||
i = np.random.randint(0, | i = np.random.randint(0, | ||
chunk = self.data[i: | chunk = self.data[i: | ||
- | chunk += np.random.normal(0, | + | chunk += np.random.normal(0, |
x = torch.tensor(chunk[: | x = torch.tensor(chunk[: | ||
y = torch.tensor(chunk[1: | y = torch.tensor(chunk[1: | ||
줄 183: | 줄 185: | ||
idx = np.arange(i, | idx = np.arange(i, | ||
data = self.data[idx].reshape(1, | data = self.data[idx].reshape(1, | ||
+ | tgt = torch.tensor(data, | ||
+ | src = tgt[:, : | ||
+ | gen = tgt[:, : | ||
+ | return tgt, src, gen | ||
+ | |||
+ | |||
+ | class MotionDataset(Dataset): | ||
+ | | ||
+ | def __init__(self, | ||
+ | self.block_size = block_size | ||
+ | |||
+ | import urllib, json | ||
+ | url = " | ||
+ | self.data = json.loads(urllib.request.urlopen(url).read())[' | ||
+ | self.data = np.array(self.data, | ||
+ | self.data = np.hstack([self.data[:, | ||
+ | self.data = np.tile(self.data, | ||
+ | self.dims = self.data.shape[-1] | ||
+ | self.data_mean = self.data.mean(0, | ||
+ | self.data_std = self.data.std(0, | ||
+ | self.data = (self.data - self.data_mean) / self.data_std | ||
+ | |||
+ | self.data = self.data.astype(np.float32) | ||
+ | self.repeat = repeat | ||
+ | self.noise_scale = noise_scale | ||
+ | | ||
+ | def __len__(self): | ||
+ | # return math.ceil(len(self.data) / (self.block_size + 1)) | ||
+ | return len(self.data) * self.repeat | ||
+ | |||
+ | def __getitem__(self, | ||
+ | # we're actually going to " | ||
+ | i = np.random.randint(0, | ||
+ | chunk = self.data[i: | ||
+ | chunk += np.random.normal(0, | ||
+ | x = torch.tensor(chunk[: | ||
+ | y = torch.tensor(chunk[1: | ||
+ | return x, y | ||
+ | |||
+ | def get_test_data(self, | ||
+ | i = np.random.randint(0, | ||
+ | idx = np.arange(i, | ||
+ | data = self.data[idx].reshape(1, | ||
tgt = torch.tensor(data, | tgt = torch.tensor(data, | ||
src = tgt[:, : | src = tgt[:, : | ||
줄 192: | 줄 237: | ||
# create the dataloader | # create the dataloader | ||
- | dataset = BasicDataset(args.block_size, | + | |
+ | | ||
loader = DataLoader(dataset, | loader = DataLoader(dataset, | ||
| | ||
# create the model | # create the model | ||
- | model = GPTModel(1, 1, args.block_size).to(args.device) | + | |
+ | | ||
# create the optimizer | # create the optimizer | ||
줄 216: | 줄 263: | ||
step = 0 | step = 0 | ||
train_loss_list = list() | train_loss_list = list() | ||
- | | + | |
| | ||
for epoch in tqdm.trange(args.max_epoch): | for epoch in tqdm.trange(args.max_epoch): | ||
줄 248: | 줄 295: | ||
| | ||
loss = (0.5 * (tgt - gen) ** 2).mean() | loss = (0.5 * (tgt - gen) ** 2).mean() | ||
- | | + | |
+ | test_score_list.append((step, | ||
- | mlab.plot(tgt.squeeze_().cpu().numpy()) | + | mlab.plot(tgt.cpu().numpy()[0, :, 0]) |
- | mlab.oplot(gen.squeeze_().cpu().numpy()) | + | mlab.oplot(gen.cpu().numpy()[0, :, 0]) |
- | | + | tqdm.tqdm.write(plotille.scatter(*zip(*test_score_list[-1000:]), height=25)) |
tqdm.tqdm.write(str(args)) | tqdm.tqdm.write(str(args)) | ||
embed() | embed() | ||
+ | |||
</ | </ | ||
code/gpt_example.1598023422.txt.gz · 마지막으로 수정됨: (바깥 편집)