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 · 마지막으로 수정됨: (바깥 편집)