当前位置:   article > 正文

ACGAN(Auxiliary Classifier GAN)详解与实现(tensorflow2_auxiliary classifiers

auxiliary classifiers

“”"

#数据加载及预处理

(x_train,y_train),_ = keras.datasets.mnist.load_data()

image_size = x_train.shape[1]

x_train = np.reshape(x_train,[-1,image_size,image_size,1])

x_train = x_train.astype(‘float32’) / 255.

num_labels = len(np.unique(y_train))

y_train = keras.utils.to_categorical(y_train)

#超参数

model_name = ‘acgan-mnist’

latent_size = 100

batch_size = 64

train_steps = 40000

lr = 2e-4

decay = 6e-8

input_shape = (image_size,image_size,1)

label_shape = (num_labels,)

#discriminator

inputs = keras.layers.Input(shape=input_shape,name=‘discriminator_input’)

discriminator = discriminator(inputs,num_labels=num_labels)

optimizer = keras.optimizers.RMSprop(lr=lr,decay=decay)

loss = [‘binary_crossentropy’,‘categorical_crossentropy’]

discriminator.compile(loss=loss,optimizer=optimizer,metrics=[‘acc’])

discriminator.summary()

#generator

input_shape = (latent_size,)

inputs = keras.layers.Input(shape=input_shape,name=‘z_input’)

labels = keras.layers.Input(shape=label_shape,name=‘labels’)

generator = generator(inputs,image_size,labels=labels)

generator.summary()

optimizer = keras.optimizers.RMSprop(lr=lr0.5,decay=decay0.5)

discriminator.trainable = False

adversarial = keras.Model([inputs,labels],discriminator(generator([inputs,labels])),

name=model_name)

adversarial.compile(loss=loss,optimizer=optimizer,metrics=[‘acc’])

adversarial.summary()

models = (generator,discriminator,adversarial)

data = (x_train,y_train)

params = (batch_size,latent_size,train_steps,num_labels,model_name)

train(models,data,params)

模型训练

def train(models,data,params):

“”"Train the discriminator and adversarial Networks

Arguments:

models (list): generator,discriminator,adversarial

data (list): x_train,y_train

params (list): network parameter

“”"

generator,discriminator,adversarial = models

x_train,y_train = data

batch_size,latent_size,train_steps,num_labels,model_name = params

save_interval = 500

noise_input = np.random.uniform(-1.,1.,size=[16,latent_size])

noise_label = np.eye(num_labels)[np.arange(0,16) % num_labels]

train_size = x_train.shape[0]

print(model_name,'Labels for generated images: ',np.argmax(noise_label,axis=1))

for i in range(train_steps):

#训练鉴别器

rand_indexes = np.random.randint(0,train_size,size=batch_size)

real_images = x_train[rand_indexes]

real_labels = y_train[rand_indexes]

#产生伪造图片

noise = np.random.uniform(-1.,1.,size=(batch_size,latent_size))

fake_labels = np.eye(num_labels)[np.random.choice(num_labels,batch_size)]

fake_images = generator.predict([noise,fake_labels])

#构造输入

x = np.concatenate((real_images,fake_images))

#训练类别标签

labels = np.concatenate((real_labels,fake_labels))

#标签

y = np.ones([2*batch_size,1])

y[batch_size:,:] = 0.0

#训练模型

metrics = discriminator.train_on_batch(x,[y,labels])

fmt = ‘%d: [disc loss: %f, srcloss: %f],’

fmt += ‘lbloss: %f, srcacc: %f, lblacc: %f’

log = fmt % (i,metrics[0],metrics[1],metrics[2],metrics[3],metrics[4])

#train adversarial network for 1 batch

noise = np.random.uniform(-1.,1.,size=(batch_size,latent_size))

fake_labels = np.eye(num_labels)[np.random.choice(num_labels,batch_size)]

y = np.ones([batch_size,1])

metrics = adversarial.train_on_batch([noise,fake_labels],[y,fake_labels])

fmt = “%s [advr loss: %f, srcloss: %f,”

fmt += “lblloss: %f, srcacc: %f, lblacc: %f]”

log = fmt % (log, metrics[0], metrics[1], metrics[2], metrics[3], metrics[4])

print(log)

if (i + 1) % save_interval == 0:

绘制生成图片

plot_images(generator,noise_input=noise_input,

noise_label=noise_label,show=False,

step=(i + 1),

model_name=model_name)

generator.save(model_name + “.h5”)

虚假图像生成及绘制plot_images函数

def plot_images(generator,

noise_input,

noise_label=None,

noise_codes=None,

show=False,

step=0,

model_name=“gan”):

“”"生成虚假图片及绘制

Arguments

generator (Model): 生成模型

noise_input (ndarray): 潜在模型

show (bool): 是否展示

step (int): step值

model_name (string): 模型名称

“”"

os.makedirs(model_name, exist_ok=True)

filename = os.path.join(model_name, “%05d.png” % step)

rows = int(math.sqrt(noise_input.shape[0]))

if noise_label is not None:

noise_input = [noise_input, noise_label]

if noise_codes is not None:

noise_input += noise_codes

images = generator.predict(noise_input)

plt.figure(figsize=(2.2, 2.2))

num_images = images.shape[0]

image_size = images.shape[1]

for i in range(num_images):

plt.subplot(rows, rows, i + 1)

image = np.reshape(images[i], [image_size, image_size])

plt.imshow(image, cmap=‘gray’)

plt.axis(‘off’)

plt.savefig(filename)

if show:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/530185
推荐阅读