コード例 #1
0
ファイル: actor.py プロジェクト: dadahxy/TSP_DRL_PtrNet
        a = F.softmax(u / self.softmax_T, dim=1)
        d = torch.bmm(u2, a.unsqueeze(2)).squeeze(2)
        return u, d.unsqueeze(1)

    def get_log_likelihood(self, _log_p, pi):
        """ args:
			_log_p: (batch, city_t, city_t)
			pi: (batch, city_t), predicted tour
			return: (batch)
		"""
        log_p = torch.gather(input=_log_p, dim=2, index=pi[:, :, None])
        return torch.sum(log_p.squeeze(-1), 1)


if __name__ == '__main__':
    cfg = load_pkl(pkl_parser().path)
    model = PtrNet1(cfg)
    inputs = torch.randn(3, 20, 2)
    pi, ll = model(inputs, device='cpu')
    print('pi:', pi.size(), pi)
    print('log_likelihood:', ll.size(), ll)

    cnt = 0
    for i, k in model.state_dict().items():
        print(i, k.size(), torch.numel(k))
        cnt += torch.numel(k)
    print('total parameters:', cnt)

    # ll.mean().backward()
    # print(model.W_q.weight.grad)
コード例 #2
0
ファイル: train.py プロジェクト: tingyingwu2010/VRP_MHA
			grads, _ = tf.clip_by_global_norm(grads, 1.0)
			optimizer.apply_gradients(zip(grads, model.trainable_weights))# optimizer.step

			ave_loss.update_state(loss)
			ave_L.update_state(L_mean)
			if t%(cfg.batch_steps*0.1) == 0:
				print('epoch%d, %d/%dsamples: loss %1.2f, average L %1.2f, average b %1.2f\n'%(
						epoch, t*cfg.batch, cfg.n_samples, ave_loss.result().numpy(), ave_L.result().numpy(), tf.reduce_mean(b)))

		baseline.epoch_callback(model, epoch)
		model.decode_type = 'sampling'
		model.save_weights('%s%s_epoch%s.h5'%(cfg.weight_dir, cfg.task, epoch), save_format = 'h5')
		
		if cfg.islogger:
				if log_path is None:
					log_path = '%s%s_%s.csv'%(cfg.log_dir, cfg.task, cfg.dump_date)#cfg.log_dir = ./Csv/
					with open(log_path, 'w') as f:
						f.write('time,epoch,loss,average length\n')
				with open(log_path, 'a') as f:
					t2 = time()
					f.write('%dmin%dsec,%d,%1.2f,%1.2f\n'%((t2-t1)//60, (t2-t1)%60, epoch, ave_loss.result().numpy(), ave_L.result().numpy()))

		ave_loss.reset_states()
		ave_L.reset_states()

if __name__ == '__main__':
	cfg = load_pkl(file_parser().path)
	train(cfg)


	
コード例 #3
0
ファイル: train.py プロジェクト: zhangzheng1993/PSPNet
            print('update min_val_avg_loss: ', min_val_avg_loss)

            weight_path = '%s%s_epoch%s.pt' % (cfg.weight_dir, cfg.dump_date,
                                               epoch)
            torch.save(model.state_dict(), weight_path)
            print(f'generate {weight_path}')

            if cfg.islogger:
                if epoch == 1:
                    val_csv_path = '%s%s_val.csv' % (cfg.log_dir, cfg.dump_date
                                                     )  #cfg.log_dir = ./Csv/
                    print(f'generate {val_csv_path}')
                    with open(val_csv_path, 'w') as f:
                        f.write('time,epoch,val avg loss\n')
                with open(val_csv_path, 'a') as f:
                    f.write('%dmin%dsec,%d,%1.3f\n' %
                            ((t6 - t5) // 60,
                             (t6 - t5) % 60, epoch, val_avg_loss / t))

        else:  # val_avg_loss/t >= min_val_avg_loss:
            cnt += 1
            print(f'current cnt: {cnt}/7')
            if cnt >= 7:
                print('early stopping')
                break


if __name__ == '__main__':
    cfg = load_pkl(train_parser().path)
    train(cfg)