print(train_x.shape)

dataset = tf.data.Dataset.from_tensor_slices(train_x)

dataset = dataset.shuffle(1000)

dataset = dataset.batch(batch_size=batch_size, drop_remainder=True)

网络

网络由鉴别网络与生成网络构成

鉴别网络

class Discriminator(keras.Model):

def init(self):

super(Discriminator,self).init()

filters = 64

self.conv1 = keras.layers.Conv2D(filters,4,2,‘valid’,use_bias=False)

self.bn1 = keras.layers.BatchNormalization()

self.conv2 = keras.layers.Conv2D(filters*2,4,2,‘valid’,use_bias=False)

self.bn2 = keras.layers.BatchNormalization()

self.conv3 = keras.layers.Conv2D(filters*4,3,1,‘valid’,use_bias=False)

self.bn3 = keras.layers.BatchNormalization()

self.conv4 = keras.layers.Conv2D(filters*8,3,1,‘valid’,use_bias=False)

self.bn4 = keras.layers.BatchNormalization()

#全局池化

self.pool = keras.layers.GlobalAveragePooling2D()

self.flatten = keras.layers.Flatten()

self.fc = keras.layers.Dense(1)

def call(self,inputs,training=True):

x = inputs

x = tf.nn.leaky_relu(self.bn1(self.conv1(x),training=training))

x = tf.nn.leaky_relu(self.bn2(self.conv2(x),training=training))

x = tf.nn.leaky_relu(self.bn3(self.conv3(x),training=training))

x = tf.nn.leaky_relu(self.bn4(self.conv4(x),training=training))

x = self.pool(x)

x = self.flatten(x)

logits = self.fc(x)

return logits

生成网络

class Generator(keras.Model):

def init(self):

super(Generator,self).init()

filters = 64

self.conv1 = keras.layers.Conv2DTranspose(filters*4,4,1,‘valid’,use_bias=False)

self.bn1 = keras.layers.BatchNormalization()

self.conv2 = keras.layers.Conv2DTranspose(filters*3,4,2,‘same’,use_bias=False)

self.bn2 = keras.layers.BatchNormalization()

self.conv3 = keras.layers.Conv2DTranspose(filters*1,4,2,‘same’,use_bias=False)

self.bn3 = keras.layers.BatchNormalization()

self.conv4 = keras.layers.Conv2DTranspose(3,4,2,‘same’,use_bias=False)

def call(self,inputs,training=False):

x = inputs

x = tf.reshape(x,(x.shape[0],1,1,x.shape[1]))

x = tf.nn.relu(x)

x = tf.nn.relu(self.bn1(self.conv1(x),training=training))

x = tf.nn.relu(self.bn2(self.conv2(x),training=training))

x = tf.nn.relu(self.bn3(self.conv3(x),training=training))

x = self.conv4(x)

x = tf.tanh(x)

return x

网络训练

训练时可以训练鉴别器多次然后训练一次生成器

定义损失函数

def celoss_ones(logits):

计算属于与标签为1的交叉熵

y = tf.ones_like(logits)

loss = keras.losses.binary_crossentropy(y, logits, from_logits=True)

return tf.reduce_mean(loss)

def celoss_zeros(logits):

计算属于与标签为0的交叉熵

y = tf.zeros_like(logits)

loss = keras.losses.binary_crossentropy(y, logits, from_logits=True)

return tf.reduce_mean(loss)

def d_loss_fn(generator, discriminator, batch_z, batch_x, is_training):

计算鉴别器的损失函数

采样生成图片

fake_image = generator(batch_z, is_training)

判定生成图片

d_fake_logits = discriminator(fake_image, is_training)

判定真实图片

d_real_logits = discriminator(batch_x, is_training)

真实图片与1之间的误差

d_loss_real = celoss_ones(d_real_logits)

生成图片与0之间的误差

d_loss_fake = celoss_zeros(d_fake_logits)

合并误差

loss = d_loss_fake + d_loss_real

return loss

def g_loss_fn(generator, discriminator, batch_z, is_training):

#计算生成器的损失函数

采样生成图片

fake_image = generator(batch_z, is_training)

在训练生成网络时,需要迫使生成图片判定为真

d_fake_logits = discriminator(fake_image, is_training)

计算生成图片与1之间的误差

loss = celoss_ones(d_fake_logits)

return loss

实例化网络及优化器

#定义超参数

#潜变量维度

z_dim = 100

#epoch大小

epochs = 300

#批大小

batch_size = 64

#学习率

lr = 0.0002

is_training = True

#实例化网络

discriminator = Discriminator()

discriminator.build(input_shape=(4,32,32,3))

discriminator.summary()

generator = Generator()

generator.build(input_shape=(4,z_dim))

generator.summary()

#实例化优化器

g_optimizer = keras.optimizers.Adam(learning_rate=lr,beta_1=0.5)

d_optimizer = keras.optimizers.Adam(learning_rate=lr,beta_1=0.5)

训练

#统计损失值

d_losses = []

g_losses = []

for epoch in range(epochs):

for _,batch_x in enumerate(dataset):

batch_z = tf.random.normal([batch_size,z_dim])

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

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

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



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

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

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

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

s://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-5vNjZgAh-1712814564274)]

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐