生成式对抗网络(GAN,generative adversarial network)的简单理解就是,想想一名伪造者试图伪造一幅毕加索的画作。一开始,伪造者非常不擅长这项任务,他随便画了幅与毕加索真迹放在一起,请鉴定商进行评估,鉴定商鉴定后,将结果反馈给伪造者,并告诉他怎样可以让❀看起来更像毕加索的真迹。伪造者学习后回去重新画,然后再拿给鉴定商鉴定,多次循环后,伪造者已经十分熟练的伪造毕加索的画作了,鉴定商的鉴定能力也有了很大的提高。最后,他们手上拥有了一些优秀的毕加索赝品。
下边的例子是使用GAN模拟二次方程:
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np
"""超参数"""
BATCH_SIZE = 64 # 每批数据个数
LR_G = 0.0001 # 生成器的学习率(伪造者)
LR_D = 0.0001 # 判别器的学习率(鉴定商)
N_IDEAS = 5 # 随机想法个数
ART_COMPONENTS = 15 # 线段上数据点个数
PAINT_POINTS = np.vstack([np.linspace(-1, 1, ART_COMPONENTS) for _ in range(BATCH_SIZE)]) # h恩坐标范围
"""创建圣经网络"""
def artist_works():
a = np.random.uniform(1, 2, size=BATCH_SIZE)[:, np.newaxis]
paintings = a