昇思25天学习打卡营第14天|DCGAN 与漫画头像生成:原理剖析与训练实战

news2024/11/23 10:16:04

目录

数据集下载

数据处理

构建生成器

构建判别器

模型训练

结果展示


数据集下载


        首先尝试卸载已安装的 mindspore 库,然后通过指定的镜像源安装特定版本(2.2.14)的 mindspore 库。从指定的 URL 下载一个 zip 文件到当前目录下的 ./faces 文件夹中,并指定如果存在同名文件则进行替换,最后将下载文件的路径存储在 path 变量中。

        代码如下:

%%capture captured_output  

# 实验环境已经预装了mindspore==2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号  

!pip uninstall mindspore -y  

!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14  

from download import download  

url = "https://download.mindspore.cn/dataset/Faces/faces.zip"  

path = download(url, "./faces", kind="zip", replace=True)  

数据处理


        第一步:为执行过程定义一些输入:

        代码如下:

batch_size = 128          # 批量大小  
image_size = 64           # 训练图像空间大小  
nc = 3                    # 图像彩色通道数  
nz = 100                  # 隐向量的长度  
ngf = 64                  # 特征图在生成器中的大小  
ndf = 64                  # 特征图在判别器中的大小  
num_epochs = 3           # 训练周期数  
lr = 0.0002               # 学习率  
beta1 = 0.5               # Adam优化器的beta1超参数  

        第二步:定义create_dataset_imagenet函数对数据进行处理和增强操作。

        代码如下:

import numpy as np  
import mindspore.dataset as ds  
import mindspore.dataset.vision as vision  
def create_dataset_imagenet(dataset_path):  
    """数据加载"""  
    dataset = ds.ImageFolderDataset(dataset_path,  
                                    num_parallel_workers=4,  
                                    shuffle=True,  
                                    decode=True)  
    # 数据增强操作  
    transforms = [  
        vision.Resize(image_size),  
        vision.CenterCrop(image_size),  
        vision.HWC2CHW(),  
        lambda x: ((x / 255).astype("float32"))  
    ]  
    # 数据映射操作  
    dataset = dataset.project('image')  
    dataset = dataset.map(transforms, 'image')  
    # 批量操作  
    dataset = dataset.batch(batch_size)  
    return dataset  
dataset = create_dataset_imagenet('./faces') 

        分析:首先导入了所需的库,包括 numpy 、mindspore 中的数据集模块 ds 和数据视觉处理模块 vision 。 定义了一个名为 create_dataset_imagenet 的函数,用于从指定路径加载图像数据。使用 ImageFolderDataset 类读取数据,设置了并行工作数为 4 ,数据随机打乱,以及进行解码。

        定义了一系列的数据增强和处理操作,包括调整大小、中心裁剪、格式转换和归一化。

        对数据集进行映射操作,只选择 image 列,并应用之前定义的数据处理操作。

        将数据集进行批量处理,最后返回处理后的数据集。

        调用 create_dataset_imagenet 函数,并传入 './faces' 路径,获取处理后的数据集并存储在 dataset 变量中。

        第三步:通过create_dict_iterator函数将数据转换成字典迭代器,然后使用matplotlib模块可视化部分训练数据。

        代码如下:

import matplotlib.pyplot as plt  
def plot_data(data):  
    # 可视化部分训练数据  
    plt.figure(figsize=(10, 3), dpi=140)  
    for i, image in enumerate(data[0][:30], 1):  
        plt.subplot(3, 10, i)  
        plt.axis("off")  
        plt.imshow(image.transpose(1, 2, 0))  
    plt.show()  
sample_data = next(dataset.create_tuple_iterator(output_numpy=True))  
plot_data(sample_data)  

        分析:导入 matplotlib.pyplot 库,并简称为 plt ,用于数据可视化。

        定义了一个名为 plot_data 的函数,用于绘制数据。函数内部首先创建一个图形,设置其大小和分辨率。然后通过循环,将输入数据中的前 30 个图像分别绘制在 3 行 10 列的子图中,关闭坐标轴并显示图像。最后显示整个图形。

        从数据集的迭代器中获取下一个数据项,并将其传递给 plot_data 函数进行可视化展示。

        运行结果:

构建生成器


        以下是生成器的代码实现:

        代码如下:

import mindspore as ms  
from mindspore import nn, ops  
from mindspore.common.initializer import Normal  
weight_init = Normal(mean=0, sigma=0.02)  
gamma_init = Normal(mean=1, sigma=0.02)  
class Generator(nn.Cell):  
    """DCGAN网络生成器"""  
    def __init__(self):  
        super(Generator, self).__init__()  
        self.generator = nn.SequentialCell(  
            nn.Conv2dTranspose(nz, ngf * 8, 4, 1, 'valid', weight_init=weight_init),  
            nn.BatchNorm2d(ngf * 8, gamma_init=gamma_init),  
            nn.ReLU(),  
            nn.Conv2dTranspose(ngf * 8, ngf * 4, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.BatchNorm2d(ngf * 4, gamma_init=gamma_init),  
            nn.ReLU(),  
            nn.Conv2dTranspose(ngf * 4, ngf * 2, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.BatchNorm2d(ngf * 2, gamma_init=gamma_init),  
            nn.ReLU(),  
            nn.Conv2dTranspose(ngf * 2, ngf, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.BatchNorm2d(ngf, gamma_init=gamma_init),  
            nn.ReLU(),  
            nn.Conv2dTranspose(ngf, nc, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.Tanh()  
            )  
    def construct(self, x):  
        return self.generator(x)  
generator = Generator()  

        分析:首先导入了 mindspore 相关的模块,并定义了两种初始化方式 weight_init 和 gamma_init 。

        定义了一个名为 Generator 的类,继承自 nn.Cell 。在 __init__ 方法中,使用 nn.SequentialCell 构建了生成器的网络结构,包含一系列的反卷积、批归一化和激活函数层。

        construct 方法定义了生成器的前向传播逻辑,即输入数据 x 经过之前构建的网络结构进行处理。

        最后实例化了 Generator 类,创建了一个生成器对象 generator 。

构建判别器


        以下是判别器的代码实现:

        代码如下:

class Discriminator(nn.Cell):  
    """DCGAN网络判别器"""  
  
    def __init__(self):  
        super(Discriminator, self).__init__()  
        self.discriminator = nn.SequentialCell(  
            nn.Conv2d(nc, ndf, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.LeakyReLU(0.2),  
            nn.Conv2d(ndf, ndf * 2, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.BatchNorm2d(ngf * 2, gamma_init=gamma_init),  
            nn.LeakyReLU(0.2),  
            nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.BatchNorm2d(ngf * 4, gamma_init=gamma_init),  
            nn.LeakyReLU(0.2),  
            nn.Conv2d(ndf * 4, ndf * 8, 4, 2, 'pad', 1, weight_init=weight_init),  
            nn.BatchNorm2d(ngf * 8, gamma_init=gamma_init),  
            nn.LeakyReLU(0.2),  
            nn.Conv2d(ndf * 8, 1, 4, 1, 'valid', weight_init=weight_init),  
            )  
        self.adv_layer = nn.Sigmoid()  
  
    def construct(self, x):  
        out = self.discriminator(x)  
        out = out.reshape(out.shape[0], -1)  
        return self.adv_layer(out)  
  
discriminator = Discriminator()  

        分析:定义了一个名为 Discriminator 的类,继承自 nn.Cell 。在 __init__ 方法中,使用 nn.SequentialCell 构建了判别器的网络结构,包含一系列的卷积、批归一化、激活函数层。同时定义了一个 nn.Sigmoid 层 adv_layer 。

        construct 方法定义了判别器的前向传播逻辑,输入数据 x 经过判别器网络处理后进行形状重塑,然后通过 adv_layer (即 Sigmoid 函数)进行输出。

        最后实例化了 Discriminator 类,创建了一个判别器对象 discriminator 。

模型训练


        第一步:定义损失函数

        代码如下:

# 定义损失函数  
adversarial_loss = nn.BCELoss(reduction='mean')  

        分析:定义了一个损失函数 adversarial_loss ,使用的是 mindspore 中的 nn.BCELoss ,即二分类交叉熵损失函数。reduction='mean' 表示对损失进行平均计算,即最终的损失值是所有样本损失的平均值。

        第二步:这里设置了两个单独的优化器,一个用于D,另一个用于G。这两个都是lr = 0.0002和beta1 = 0.5的Adam优化器。

        代码如下:

# 为生成器和判别器设置优化器  
optimizer_D = nn.Adam(discriminator.trainable_params(), learning_rate=lr, beta1=beta1)  
optimizer_G = nn.Adam(generator.trainable_params(), learning_rate=lr, beta1=beta1)  
optimizer_G.update_parameters_name('optim_g.')  
optimizer_D.update_parameters_name('optim_d.')  

        分析:创建了一个 Adam 优化器 optimizer_D 用于优化判别器 discriminator 的可训练参数。lr 是学习率,beta1 是 Adam 优化器的一个参数。

        创建了一个 Adam 优化器 optimizer_G 用于优化生成器 generator 的可训练参数,使用的学习率和 beta1 与判别器的优化器相同。

        分别为生成器和判别器的优化器更新了参数名称,将生成器优化器的参数名称更新为 optim_g. ,判别器优化器的参数名称更新为 optim_d. 。这样可以更清晰地区分和管理不同模型部分的优化器参数。

        第三步:实现模型训练正向逻辑:

        代码如下:

def generator_forward(real_imgs, valid):  
    # 将噪声采样为发生器的输入  
    z = ops.standard_normal((real_imgs.shape[0], nz, 1, 1))  
    # 生成一批图像  
    gen_imgs = generator(z)  
    # 损失衡量发生器绕过判别器的能力  
    g_loss = adversarial_loss(discriminator(gen_imgs), valid)  
    return g_loss, gen_imgs  
def discriminator_forward(real_imgs, gen_imgs, valid, fake):  
    # 衡量鉴别器从生成的样本中对真实样本进行分类的能力  
    real_loss = adversarial_loss(discriminator(real_imgs), valid)  
    fake_loss = adversarial_loss(discriminator(gen_imgs), fake)  
    d_loss = (real_loss + fake_loss) / 2  
    return d_loss  
grad_generator_fn = ms.value_and_grad(generator_forward, None,  
                                      optimizer_G.parameters,  
                                      has_aux=True)  
grad_discriminator_fn = ms.value_and_grad(discriminator_forward, None,  
                                          optimizer_D.parameters)  
 
@ms.jit  
def train_step(imgs):  
    valid = ops.ones((imgs.shape[0], 1), mindspore.float32)  
    fake = ops.zeros((imgs.shape[0], 1), mindspore.float32)  
    (g_loss, gen_imgs), g_grads = grad_generator_fn(imgs, valid)  
    optimizer_G(g_grads)  
    d_loss, d_grads = grad_discriminator_fn(imgs, gen_imgs, valid, fake)  
    optimizer_D(d_grads)  
    return g_loss, d_loss, gen_imgs  

        分析:定义了 generator_forward 函数,它首先生成噪声作为生成器的输入并得到生成的图像 gen_imgs ,然后通过判别器对生成图像的判断结果和有效的标签 valid 计算生成器的损失 g_loss ,最后返回损失和生成的图像。

        定义了 discriminator_forward 函数,分别计算判别器对真实图像和生成图像的损失,然后取平均得到判别器的损失 d_loss 并返回。

        使用 mindspore 的 value_and_grad 函数为生成器和判别器的前向传播计算梯度。

        定义了 train_step 函数,首先创建有效的标签 valid 和假的标签 fake 。然后通过之前定义的梯度计算函数计算生成器的梯度和损失以及生成的图像,使用生成器的优化器更新参数。接着计算判别器的梯度和损失,使用判别器的优化器更新参数。最后返回生成器和判别器的损失以及生成的图像。这个函数被 @ms.jit 装饰,可能会进行即时编译以提高性能。

        第四步:循环训练网络,每经过50次迭代,就收集生成器和判别器的损失,以便于后面绘制训练过程中损失函数的图像。

        代码如下:

import mindspore  
G_losses = []  
D_losses = []  
image_list = []  
total = dataset.get_dataset_size()  
for epoch in range(num_epochs):  
    generator.set_train()  
    discriminator.set_train()  
    # 为每轮训练读入数据  
    for i, (imgs, ) in enumerate(dataset.create_tuple_iterator()):  
        g_loss, d_loss, gen_imgs = train_step(imgs)  
        if i % 100 == 0 or i == total - 1:  
            # 输出训练记录  
            print('[%2d/%d][%3d/%d]   Loss_D:%7.4f  Loss_G:%7.4f' % (  
                epoch + 1, num_epochs, i + 1, total, d_loss.asnumpy(), g_loss.asnumpy()))  
        D_losses.append(d_loss.asnumpy())  
        G_losses.append(g_loss.asnumpy())  
    # 每个epoch结束后,使用生成器生成一组图片  
    generator.set_train(False)  
    fixed_noise = ops.standard_normal((batch_size, nz, 1, 1))  
    img = generator(fixed_noise)  
    image_list.append(img.transpose(0, 2, 3, 1).asnumpy())  
    # 保存网络模型参数为ckpt文件  
    mindspore.save_checkpoint(generator, "./generator.ckpt")  
    mindspore.save_checkpoint(discriminator, "./discriminator.ckpt") 

        分析:导入 mindspore 库,并初始化三个列表 G_losses 用于存储生成器的损失值,D_losses 用于存储判别器的损失值,image_list 用于存储生成的图像。

        获取数据集的大小。

        开始训练的循环,每个循环代表一个训练轮次,并设置生成器和判别器为训练模式。

        在每一轮训练中,通过数据集的迭代器读取数据并执行 train_step 函数进行训练,获取生成器和判别器的损失值。每隔 100 步或在最后一步时,打印训练记录,并将损失值添加到相应的列表中。

        在每个训练轮次结束后,将生成器设置为评估模式,生成一组固定噪声的图像,并将其添加到 image_list 中。

        保存生成器和判别器的模型参数为 .ckpt 文件。

        运行结果:

[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.707.251 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.707.394 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.707.485 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.734.400 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.734.917 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.734.995 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.055 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.113 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.163 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.215 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.269 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.320 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.394 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.735.451 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.737.401 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.737.463 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.739.812 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.739.889 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.740.014 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.740.090 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.740.201 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.740.273 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.776.259 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.776.536 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.776.707 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:31:01.776.882 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ 1/3][  1/549]   Loss_D: 0.8259  Loss_G: 0.6072  
[ 1/3][101/549]   Loss_D: 0.0870  Loss_G: 4.1363  
[ 1/3][201/549]   Loss_D: 0.2487  Loss_G: 2.2273  
[ 1/3][301/549]   Loss_D: 0.3117  Loss_G: 1.3479  
[ 1/3][401/549]   Loss_D: 0.1768  Loss_G: 7.7851  
[ 1/3][501/549]   Loss_D: 0.2311  Loss_G: 4.5245  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.438.749 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.438.847 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.438.904 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.452.389 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.452.767 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.452.836 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.452.892 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.452.939 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.452.986 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.453.033 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.453.079 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.453.125 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.453.171 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.453.216 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.454.872 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.454.926 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.456.830 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.456.896 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.457.006 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.457.073 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.457.138 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.457.203 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.475.414 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.475.658 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.475.813 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ERROR] CORE(225,ffffb31d7930,python):2024-07-16-04:32:12.475.966 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_225/2743497794.py]  
[ 1/3][549/549]   Loss_D: 0.4179  Loss_G: 0.9930  
[ 2/3][  1/549]   Loss_D: 0.3010  Loss_G: 4.7594  
[ 2/3][101/549]   Loss_D: 0.5035  Loss_G:10.4138  
[ 2/3][201/549]   Loss_D: 0.9403  Loss_G:14.3117  
[ 2/3][301/549]   Loss_D: 0.2579  Loss_G: 2.4129  
[ 2/3][401/549]   Loss_D: 0.2723  Loss_G: 1.6250  
[ 2/3][501/549]   Loss_D: 0.3616  Loss_G: 4.8121  
[ 2/3][549/549]   Loss_D: 0.3363  Loss_G: 1.1764  
[ 3/3][  1/549]   Loss_D: 0.2645  Loss_G: 3.3743  
[ 3/3][101/549]   Loss_D: 0.5911  Loss_G: 6.1797  
[ 3/3][201/549]   Loss_D: 0.1594  Loss_G: 2.5986  
[ 3/3][301/549]   Loss_D: 0.2017  Loss_G: 3.4795  
[ 3/3][401/549]   Loss_D: 0.8796  Loss_G: 5.3484  
[ 3/3][501/549]   Loss_D: 0.1958  Loss_G: 1.9727  
[ 3/3][549/549]   Loss_D: 0.8177  Loss_G: 7.9810  

结果展示


        代码如下:

plt.figure(figsize=(10, 5))  
plt.title("Generator and Discriminator Loss During Training")  
plt.plot(G_losses, label="G", color='blue')  
plt.plot(D_losses, label="D", color='orange')  
plt.xlabel("iterations")  
plt.ylabel("Loss")  
plt.legend()  
plt.show()  
import matplotlib.pyplot as plt  
import matplotlib.animation as animation  
def showGif(image_list):  
    show_list = []  
    fig = plt.figure(figsize=(8, 3), dpi=120)  
    for epoch in range(len(image_list)):  
        images = []  
        for i in range(3):  
            row = np.concatenate((image_list[epoch][i * 8:(i + 1) * 8]), axis=1)  
            images.append(row)  
        img = np.clip(np.concatenate((images[:]), axis=0), 0, 1)  
        plt.axis("off")  
        show_list.append([plt.imshow(img)])  
  
    ani = animation.ArtistAnimation(fig, show_list, interval=1000, repeat_delay=1000, blit=True)  
    ani.save('./dcgan.gif', writer='pillow', fps=1)  
showGif(image_list)  
# 从文件中获取模型参数并加载到网络中  
mindspore.load_checkpoint("./generator.ckpt", generator)  
  
fixed_noise = ops.standard_normal((batch_size, nz, 1, 1))  
img64 = generator(fixed_noise).transpose(0, 2, 3, 1).asnumpy()  
  
fig = plt.figure(figsize=(8, 3), dpi=120)  
images = []  
for i in range(3):  
    images.append(np.concatenate((img64[i * 8:(i + 1) * 8]), axis=1))  
img = np.clip(np.concatenate((images[:]), axis=0), 0, 1)  
plt.axis("off")  
plt.imshow(img)  
plt.show()  

        分析:创建一个图形,设置标题为“Generator and Discriminator Loss During Training”,绘制生成器和判别器的损失曲线,分别用蓝色和橙色表示,并添加坐标轴标签和图例后显示图形。

        定义了一个名为 showGif 的函数,用于将生成的图像列表制作成 GIF 动画。在函数内部,创建图形并处理图像,然后使用 animation.ArtistAnimation 生成动画并保存为 GIF 文件。

        从指定的文件中加载生成器的模型参数。

        生成固定的噪声,并通过生成器得到生成的图像,然后进行维度转换。

        创建图形,处理生成的图像,显示最终的图像。

        运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes k8s Deployment 控制器配置管理 k8s 红蓝部署 金丝雀发布

目录 1、Deployment控制器:概念、原理解读 1.1 Deployment概述 1.2 Deployment工作原理:如何管理rs和Pod? 2、Deployment资源清单文件编写技巧 3、Deployment使用案例:创建一个web站点 4、Deployment管理pod:扩…

信创学习笔记(三),信创之操作系统OS思维导图

创作不易 只因热爱!! 热衷分享,一起成长! “你的鼓励就是我努力付出的动力” 一. 回顾信创CPU芯片 1. x86应用生态最丰富, 海光(3,5,7)授权较新,无桌面授权,多用于服务器 兆芯(ZX, KX, KH)授权较早期. 2. ARMv8移动端应用生态丰富, 华为鲲鹏(9) ,制裁中,…

JWT令牌详细解析

JWT令牌 前言一、JWT是什么?二、JWT与传统CookieSession的对比三、JWT1. JWT的功能2. JWT的结构3. JWT的使用 前言 主要介绍了SpringBoot集成JWT令牌详细说明,JWT方式校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的…

前端报错adding CSS “touch-action: none“ to this element解决方案

目录 如图所示控制台出现报错: 原因: touch-action 介绍: 解决方案: 1.手动设置touch-action: 2.使用条件渲染: 3.CSS样式隔离: 4.浏览器兼容性: 5. 忽略警告 如图所示控制台…

持续集成04--Jenkins结合Gitee创建项目

前言 在持续集成/持续部署(CI/CD)的旅途中,Jenkins与版本控制系统的紧密集成是不可或缺的一环。本篇“持续集成03--Jenkins结合Gitee创建项目”将引导如何将Jenkins与Gitee(一个流行的Git代码托管平台)相结合&#xff…

华为USG6000V防火墙安全策略用户认证

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…

手机误删图片怎么办?2个照片恢复大师来帮忙,轻松找回

手机照片早已成为我们日常生活中的一部分,记录着欢笑、泪水等各种瞬间。但有时候,因为各种原因,它们会突然消失,让人痛心疾首。照片恢复有哪些方法呢?别急,今天就给大家带来2位照片恢复大师,它们…

中国姓名学大师排行榜,山东济南最有名的起名大师是谁

在2024年揭晓的中国姓名学领域,一场声势浩大的评选活动吸引了无数目光——寻找国内最杰出的起名大师。在这场激烈的竞争中,山东济南的颜廷利教授以其深厚的易学功底和卓越的命名技艺,荣获“中国姓名学十大权威专家”榜首位置,成为…

【深度学习】BeautyGAN: 美妆,化妆,人脸美妆

https://www.sysu-hcp.net/userfiles/files/2021/03/01/3327b564380f20c9.pdf 【深度学习】BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversaria…

NSSCTF中24网安培训day2中web题目【下】

[NISACTF 2022]easyssrf 这道题目考察的是php伪协议的知识点 首先利用file协议进行flag查找 file:///flag.php 接着我们用file协议继续查找fl4g file:///fl4g 接着我们访问此文件,得到php代码如下 这里存在着stristr的函数&#x…

AI视频教程下载-ChatGPT速成课程:工作中的ChatGPT入门

使用ChatGPT提升你的生产力:利用OpenAI的革命性ChatGPT模型。 你准备好深入人工智能交流的世界,彻底改变你的职业生涯了吗?本课程适合技术背景和非技术背景的人士,它以独特、有趣且专业的方式,教授如何使用OpenAI的Ch…

【鸿蒙OS】【ArkUI】鸿蒙OS UI布局适配终极攻略

鸿蒙OS UI布局适配终极攻略 像素适配大法,此方法也适合Android ArkUI为开发者提供4种像素单位,框架采用vp为基准数据单位。 vp相当于Android里的dp fp相当于Android里的sp 官方是如何定义的呢,如下图 今天我来教大家如何用PX做到ArkUI的终级适配&…

【python】Pandas 运行报错分析:KeyError: Label not found

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Docker基本讲解及演示

Docker安装教程 Docker安装教程 1、Docker介绍 Docker是一个开源的应用容器引擎,允许开发者将应用程序及其依赖项打包成一个轻量级、可移植的容器,然后发布到任何支持 Docker 的环境中运行,无论是开发机、测试机还是生产环境。 Docker基于…

CentOS 7 网络配置

如想了解请查看 虚拟机安装CentOS7 第一步:查看虚拟机网络编辑器、查看NAT设置 (子网ID,网关IP) 第二步:配置VMnet8 IP与DNS 注意事项:子网掩码与默认网关与 第一步 保持一致 第三步:网络配置…

EXCEL VBA工程密码破解 工作表保护破解

这里写目录标题 破解Excel宏工程加密方法一 新建破解宏文件方法二 修改二进制文件 破解工作表保护引用 破解Excel宏工程加密 如图所示 白料数据处理已工程被加密。 方法一 新建破解宏文件 1 创建一个XLSM文件,查看代码 ALTF11 2 新建一个模块,“插…

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成IP核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核,再分别调用…

Vue+Echarts做图表展示

1.Echarts安装 终端运行安装命令: npm install echarts -s 在main.js做全局引用: //引入echarts import * as echarts from echarts //vue全局注入echarts Vue.prototype.$echarts echarts; 2.页面使用Echarts画柱状图和饼图 效果: 代码展…

Qt各个版本安装的保姆级教程

文章目录 前言Qt简介下载Qt安装包安装Qt找到Qt的快捷方式总结 前言 Qt是一款跨平台的C图形用户界面应用程序开发框架,广泛应用于桌面软件、嵌入式软件、移动应用等领域。Qt的强大之处在于其高度的模块化和丰富的工具集,可以帮助开发者快速、高效地构建出…

esplice老项目(非maven)导入idea问题

解决导入idea显示不正常 老项目导入idea后,显示为如下所示: 显示的不太正常,正常显示为下面这个样子: 解决 非老项目 idea的项目中所有的文件全部变成了.java(已解决) 老项目 以下内容参考:idea导入项目后java文…