深度学习--GAN

GAN生成式对抗网络

LR_D=0.001
LR_G=0.001
batch_size=64
art_components=15  #生成的15个线段
N_IDEAS=5  #随机灵感
paint_points=np.vstack([np.linspace(-1,1,art_components) for _ in range(batch_size)])  #在-1到1的线段中有15个点
def artist_works(): #产生数据--著名画家
	a=np.random.uniform(1,2,size=batch_size)[:,np.newaxis] #生成1到2的随机数,尺寸为batchsize,[]内为维度
	paintings=a*np.power(paint_points,2)+(a-1)  #曲线中15个点产生一元二次函数,a*x^2+a-1
	paintings=torch.feom_torch(paintings).float()
	return Variable(paintings)
G=nn.Sequential(nn.Linear(N_IDEAS,128), nn.ReLU(),nn.Linear(128,art_components))
D=nn.Sequential(nn.Linear(art_components,128),nn.ReLU(),nn.Linear(128,1),nn.Sigmoid())  #sigmoid转为概率
#优化参数
opt_D=torch.optim.Adam(D.parameters(),lr=LR_D)
opt_G=torch.optim.Adam(G.parameters(),lr=LR_G)
for step in range(10000):  #训练
	artist_paintings=artist_works()  #随机生成的作品--著名画家
	G_ideas=Variable(torch.randn(batch_size,N_IDEAS))  #随机生成
	G_paintings=G(G_ideas)  #新手画家
	prob_artist0=D(artist_paintings)
	prob_artist1=D(G_paintings)
	D_loss=- torch.mean(torch.log(prob_artist0)+torch.log(1-prob_artist1))  #提高著名画家被认为著名画家,减少新手画家被认为著名画家
	G_loss=torch.mean(torch.log(1-prob_artist1))  #提高新手画家被认为著名画家
	#初始化
	opt_D.zero_grad()
	D_loss.backward()
	opt_D.step()
	opt_G.zero_grad()
	G_loss.backward()
	opt_G.step()
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值