尝试一下seed对深度学习Loss的影响

在网上复现别人关于土壤湿度的训练模型,那篇文章中的代码,基于飞桨的,

我改了下,基于pytorch, 最终loss如下:

找了很久发现不了问题,以为是导入数据或者是网络结构的问题,逐步打印数据,看不到明显问题。

之前的seed是torch.manual_seed(666)

试了下改为:

torch.manual_seed(2)

loss变化了很多。

从结果上看,也收敛了。感觉很神奇。之前一直以为是代码的问题。

查数据,查结构。

虽然不知道什么原因,总算还有一个差不多的结果。

收工。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,那么我来为您详细地解答一下如何搭建输入为11*11(8-bit color)图片灰度图像文件,用DCGAN扩充此数据集,并生成更多单张11*11(8-bit color)灰度图像的代码。 首先,您需要准备好数据集。由于您需要生成单张11*11(8-bit color)的灰度图像,因此您需要准备至少一张这样的图片。如果您没有现成的图片可以使用,可以考虑使用Python的Pillow库生成一张随机的11*11像素的灰度图像。生成代码如下: ```python from PIL import Image # 创建一张11*11的灰度图像 img = Image.new('L', (11, 11)) # 保存图像 img.save('gray_image.png') ``` 接下来,您需要使用DCGAN模型对这张图片进行训练,并生成更多的11*11(8-bit color)灰度图像。您可以使用PyTorch框架来实现DCGAN模型。以下是一个简单的代码示例: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import transforms from torchvision.datasets import ImageFolder from torchvision.utils import save_image from tqdm import tqdm # 设置随机种子 torch.manual_seed(42) # 设置超参数 batch_size = 64 epochs = 100 latent_size = 100 learning_rate = 0.0002 # 定义生成器模型 class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.model = nn.Sequential( nn.Linear(latent_size, 128), nn.BatchNorm1d(128), nn.ReLU(inplace=True), nn.Linear(128, 256), nn.BatchNorm1d(256), nn.ReLU(inplace=True), nn.Linear(256, 512), nn.BatchNorm1d(512), nn.ReLU(inplace=True), nn.Linear(512, 11*11), nn.Tanh() ) def forward(self, z): img = self.model(z) img = img.view(img.size(0), 1, 11, 11) return img # 定义判别器模型 class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() self.model = nn.Sequential( nn.Linear(11*11, 512), nn.LeakyReLU(0.2, inplace=True), nn.Linear(512, 256), nn.LeakyReLU(0.2, inplace=True), nn.Linear(256, 128), nn.LeakyReLU(0.2, inplace=True), nn.Linear(128, 1), nn.Sigmoid() ) def forward(self, img): img = img.view(img.size(0), -1) validity = self.model(img) return validity # 定义训练函数 def train(generator, discriminator, dataloader, optimizer_G, optimizer_D, criterion): for epoch in range(epochs): for i, (imgs, _) in enumerate(dataloader): batch_size = imgs.size(0) # 训练判别器 optimizer_D.zero_grad() real_imgs = imgs.view(batch_size, -1) real_labels = torch.ones(batch_size, 1) fake_labels = torch.zeros(batch_size, 1) z = torch.randn(batch_size, latent_size) fake_imgs = generator(z) real_loss = criterion(discriminator(real_imgs), real_labels) fake_loss = criterion(discriminator(fake_imgs.detach()), fake_labels) loss_D = (real_loss + fake_loss) / 2 loss_D.backward() optimizer_D.step() # 训练生成器 optimizer_G.zero_grad() z = torch.randn(batch_size, latent_size) fake_imgs = generator(z) loss_G = criterion(discriminator(fake_imgs), real_labels) loss_G.backward() optimizer_G.step() # 保存生成的图像 if epoch % 10 == 0: save_image(fake_imgs.data[:25], 'generated_images/%d.png' % epoch, nrow=5, normalize=True) # 加载数据集 transform = transforms.Compose([ transforms.Grayscale(), transforms.Resize(11), transforms.ToTensor(), transforms.Normalize([0.5], [0.5]) ]) dataset = ImageFolder('dataset', transform=transform) dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True) # 创建生成器和判别器 generator = Generator() discriminator = Discriminator() # 定义损失函数和优化器 criterion = nn.BCELoss() optimizer_G = optim.Adam(generator.parameters(), lr=learning_rate, betas=(0.5, 0.999)) optimizer_D = optim.Adam(discriminator.parameters(), lr=learning_rate, betas=(0.5, 0.999)) # 训练模型 train(generator, discriminator, dataloader, optimizer_G, optimizer_D, criterion) ``` 在上面的代码中,我们使用了PyTorch的DataLoader来加载数据集,使用了torchvision.transforms对数据进行预处理,并创建了一个简单的DCGAN模型。在训练过程中,我们保存了每个epoch生成的图像,并最终保存了生成的图像到generated_images文件夹中。 希望这个代码示例可以帮助您完成您的需求。如果您有任何问题或需要进一步的帮助,请随告诉我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值