進行生成簡單數字圖片

1.之前只能做一些圖像預測,我有個大膽的想法,如果神經網絡正向就是預測圖片的類別,如果我只有一個類別那就可以進行生成圖片,專業術語叫做gan對抗網絡
在這里插入圖片描述
2.訓練代碼

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
import torchvision.datasets as dset
import matplotlib.pyplot as plt
import os# 設置環境變量
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 定義生成器模型
class Generator(nn.Module):def __init__(self, input_dim=100, output_dim=784):super(Generator, self).__init__()self.fc1 = nn.Linear(input_dim, 256)self.fc2 = nn.Linear(256, 512)self.fc3 = nn.Linear(512, 1024)self.fc4 = nn.Linear(1024, output_dim)self.relu = nn.ReLU()self.tanh = nn.Tanh()def forward(self, x):x = self.relu(self.fc1(x))x = self.relu(self.fc2(x))x = self.relu(self.fc3(x))x = self.tanh(self.fc4(x))return x# 定義判別器模型
class Discriminator(nn.Module):def __init__(self, input_dim=784, output_dim=1):super(Discriminator, self).__init__()self.fc1 = nn.Linear(input_dim, 1024)self.fc2 = nn.Linear(1024, 512)self.fc3 = nn.Linear(512, 256)self.fc4 = nn.Linear(256, output_dim)self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self, x):x = self.relu(self.fc1(x))x = self.relu(self.fc2(x))x = self.relu(self.fc3(x))x = self.sigmoid(self.fc4(x))return x# 加載 MNIST 手寫數字圖片數據集
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])
dataroot = "path_to_your_mnist_dataset"  # 替換為 MNIST 數據集的路徑
dataset = dset.MNIST(root=dataroot, train=True, transform=transform, download=True)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=128, shuffle=True)# 創建生成器和判別器實例
input_dim = 100
output_dim = 784
generator = Generator(input_dim, output_dim)
discriminator = Discriminator(output_dim)# 定義優化器和損失函數
lr = 0.0002
beta1 = 0.5
optimizer_g = optim.Adam(generator.parameters(), lr=lr, betas=(beta1, 0.999))
optimizer_d = optim.Adam(discriminator.parameters(), lr=lr, betas=(beta1, 0.999))
criterion = nn.BCELoss()# 訓練 GAN 模型
num_epochs = 50
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print("Device:", device)
generator.to(device)
discriminator.to(device)
for epoch in range(num_epochs):for i, data in enumerate(dataloader, 0):real_images, _ = datareal_images = real_images.to(device)batch_size = real_images.size(0)  # 獲取批次樣本數量# 訓練判別器optimizer_d.zero_grad()real_labels = torch.full((batch_size, 1), 1.0, device=device)fake_labels = torch.full((batch_size, 1), 0.0, device=device)noise = torch.randn(batch_size, input_dim, device=device)fake_images = generator(noise)real_outputs = discriminator(real_images.view(batch_size, -1))fake_outputs = discriminator(fake_images.detach())d_loss_real = criterion(real_outputs, real_labels)d_loss_fake = criterion(fake_outputs, fake_labels)d_loss = d_loss_real + d_loss_faked_loss.backward()optimizer_d.step()# 訓練生成器optimizer_g.zero_grad()noise = torch.randn(batch_size, input_dim, device=device)fake_images = generator(noise)fake_outputs = discriminator(fake_images)g_loss = criterion(fake_outputs, real_labels)g_loss.backward()optimizer_g.step()# 輸出訓練信息if i % 100 == 0:print("[Epoch %d/%d] [Batch %d/%d] [D loss: %.4f] [G loss: %.4f]"% (epoch, num_epochs, i, len(dataloader), d_loss.item(), g_loss.item()))# 保存生成器的權重和圖片示例if epoch % 10 == 0:with torch.no_grad():noise = torch.randn(64, input_dim, device=device)fake_images = generator(noise).view(64, 1, 28, 28).cpu().numpy()fig, axes = plt.subplots(nrows=8, ncols=8, figsize=(12, 12), sharex=True, sharey=True)for i, ax in enumerate(axes.flatten()):ax.imshow(fake_images[i][0], cmap='gray')ax.axis('off')plt.subplots_adjust(wspace=0.05, hspace=0.05)plt.savefig("epoch_%d.png" % epoch)plt.close()torch.save(generator.state_dict(), "generator_epoch_%d.pth" % epoch)

3.測試模型的代碼

import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision.utils import save_image# 定義生成器模型
class Generator(nn.Module):def __init__(self, input_dim, output_dim):super(Generator, self).__init__()self.fc1 = nn.Linear(input_dim, 256)self.fc2 = nn.Linear(256, 512)self.fc3 = nn.Linear(512, 1024)self.fc4 = nn.Linear(1024, output_dim)def forward(self, x):x = F.leaky_relu(self.fc1(x), 0.2)x = F.leaky_relu(self.fc2(x), 0.2)x = F.leaky_relu(self.fc3(x), 0.2)x = torch.tanh(self.fc4(x))return x# 創建生成器模型
generator = Generator(input_dim=100, output_dim=784)# 加載預訓練權重
generator_weights = torch.load("generator_epoch_40.pth", map_location=torch.device('cpu'))# 將權重加載到生成器模型
generator.load_state_dict(generator_weights)# 生成隨機噪聲
noise = torch.randn(1, 100)# 生成圖像
fake_image = generator(noise).view(1, 1, 28, 28)# 保存生成的圖片
save_image(fake_image, "generated_image.png", normalize=False)

#測試結果,由于我的訓練集是數字的,所以會生成各種各樣的數字,下面明顯的是1
在這里插入圖片描述
#應該也是1
在這里插入圖片描述

#再次運行,我也看不出來,不過只要我訓練只有一個種類的問題就可以生成這個種類的圖像
在這里插入圖片描述
#搞定黑白圖,那彩色圖應該距離不遠了,我需要改進的是把對抗網絡的代碼改為訓練一個種類的圖形,不過我感覺這種圖形具有隨機性,雖然通過訓練我們得到了所有圖像他們的規律,但是如果需要正常點的圖片還是挺難的,就像是上面這張人都不一定知道他是什么東西(在沒有顏色的情況下)總結就是精度不夠,而且隨機性太強了,現在普遍圖片AI生成工具具有這個缺點(生成的物體可能會扭曲,挺陰間的),而且生成的圖片速度慢,如果誰比較受益那一定是老黃(英偉達)哈哈哈
//比如下面這個圖片生成視頻的網站
https://app.runwayml.com/login

#每一幀看起來都沒有問題,就是連起來變成視頻不自然,如果有改進方法的話那可能需要引入重力/加速度/光處理 等等物理公式,來讓圖片更自然…
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213230.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

飛天使-rsync大文件斷點續傳與vim批量刪除

文章目錄 rsync 斷點續傳,親測有效vim 批量刪除消息 rsync 斷點續傳,親測有效 rsync -vzrtp -P --append -e "/usr/bin/ssh -p 22 -o StrictHostKeyCheckingno" m.tar.gz root10.0.0.1:/tmp后臺運行 screem 既可 或者 nohup rsync -vzrt…

【華為od】存在一個m*n的二維數組,其成員取值范圍為0,1。其中值為1的元素具備擴散性,每經過1S,將上下左右值為0的元素同化為1。

存在一個m*n的二維數組,其成員取值范圍為0,1。其中值為1的元素具備擴散性,每經過1S,將上下左右值為0的元素同化為1。將數組所有成員初始化為0,將矩陣的[i, j]和[m,n]位置上元素修改成1后,在經過多長時間所有元素變為1。 輸入描述 輸入的前兩個數字是矩陣大小。后面是數字…

盛域宏數合伙人張天:AI時代,數字化要以AI重構

大數據產業創新服務媒體 ——聚焦數據 改變商業 在這個飛速發展的科技時代,數字化已經深刻地改變了我們的生活和商業方式。信息技術的迅猛發展使得數據成為現代社會最寶貴的資源之一。數字化已經不再是可選項,而是企業持續發展的必由之路。背靠著數據的…

【React】路由的基礎使用

react-router-dom6的基礎使用 1、安裝依賴 npm i react-router-dom默認安裝最新版本的 2、在src/router/index.js import { createBrowserRouter } from "react-router-dom"/* createBrowserRouter:[/home]--h5路由createHashRouter:[/#/ho…

Linux訪問NFS存儲及自動掛載

本章主要介紹NFS客戶端的使用 創建NFS服務器并通過NFS共享一個目錄在客戶端上訪問NFS共享的目錄自動掛載的配置和使用 1.1 訪問NFS存儲 前面那篇介紹了本地存儲,本章就來介紹如何使用網絡上上的存儲設備。NFS即網絡文件系統,所實現的是Linux和Linux之…

通信:mqtt學習網址

看這個網址:講的很詳細,后面補實戰例子 第一章 - MQTT介紹 MQTT協議中文版 (gitbooks.io)https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

【網絡編程】-- 04 UDP

網絡編程 6 UDP 6.1 初識Tomcat 服務端 自定義 STomcat S 客戶端 自定義 C瀏覽器 B 6.2 UDP 6.2.1 udp實現發送消息 接收端: package com.duo.lesson03;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketExceptio…

【論文極速讀】LVM,視覺大模型的GPT時刻?

【論文極速讀】LVM,視覺大模型的GPT時刻? FesianXu 20231210 at Baidu Search Team 前言 這一周,LVM在arxiv上剛掛出不久,就被眾多自媒體宣傳為『視覺大模型的GPT時刻』,筆者抱著強烈的好奇心,在繁忙工作之…

m.2固態硬盤怎么選擇?

一、什么是固態硬盤 固態硬盤又稱SSD,是Solid State Drive的簡稱,由于采用了閃存技術,其處理速度遠遠超過傳統的機械硬盤,這主要是因為固態硬盤的數據以電子的方式存儲在閃存芯片中,不需要像機械硬盤那樣通過磁頭讀寫磁…

linux查看筆記本電池健康情況

本人的老電腦,筆記本x1 carbon 5th 用久了,電池不行了,實際容量只有27.657%,充電到40%的時候,一瞬間彪滿100%。到某寶淘了一個 model: 01AV430的電池,等更換了再看看使用情況 $ upower --help 用法:upower…

Linux 安裝 中間件 Tuxedo

安裝步聚 一、首先,下載中間件安裝包: tuxedo121300_64_Linux_01_x86 Tuxedo下載地址: Oracle Tuxedo Downloads 二、新建Oracle用戶組(創建Oracle用戶時,需要root權限操作,登陸) [rootloca…

【CiteSpace】引文可視化分析軟件CiteSpace下載與安裝

CiteSpace 譯“引文空間”,是一款著眼于分析科學分析中蘊含的潛在知識,是在科學計量學、數據可視化背景下逐漸發展起來的引文可視化分析軟件。由于是通過可視化的手段來呈現科學知識的結構、規律和分布情況,因此也將通過此類方法分析得到的可…

【Spring教程23】Spring框架實戰:從零開始學習SpringMVC 之 SpringMVC簡介與SpringMVC概述

目錄 1,SpringMVC簡介2、SpringMVC概述 歡迎大家回到《Java教程之Spring30天快速入門》,本教程所有示例均基于Maven實現,如果您對Maven還很陌生,請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環境》&…

python使用vtk與mayavi三維可視化繪圖

VTK(Visualization Toolkit)是3D計算機圖形學、圖像處理和可視化的強大工具。它可以通過Python綁定使用,適合于科學數據的復雜可視化。Mayavi 依賴于 VTK (Visualization Toolkit),一個用于 3D 計算機圖形、圖像處理和可視化的強大…

AS安裝目錄

編輯器: sdk: gradle: gradle使用的jdk目錄:Gradle使用的jdk是android studio安裝目錄下的jbr 成功項目的android studio配置:

H264碼流結構

視頻編碼的碼流結構是指視頻經過編碼之后得到的二進制數據是怎么組織的,或者說,就是編碼后的碼流我們怎么將一幀幀編碼后的圖像數據分離出來,以及在二進制碼流數據中,哪一塊數據是一幀圖像,哪一塊數據是另外一幀圖像。…

C++面試寶典第4題:合并鏈表

題目 有一個鏈表,其節點聲明如下: struct TNode {int nData;struct TNode *pNext;TNode(int x) : nData(x), pNext(NULL) {} }; 現給定兩個按升序排列的單鏈表pA和pB,請編寫一個函數,實現這兩個單鏈表的合并。合并后,…

scheduleatfixedrate詳解

scheduleatfixedrate詳解 大家好,我是免費搭建查券返利機器人賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!在Java開發中,我們常常需要執行定時任務,并且需要保證任務按照一定…

使用Java實現基數排序算法

文章目錄 基數排序算法 基數排序算法 (1)基本思想:將整數按位數切割成不同的數字,然后按每個位數分別比較。 (2)排序過程:將所有待比較數值(正整數)統一為同樣的數位長…

Vuex快速上手

一、Vuex 概述 目標:明確Vuex是什么,應用場景以及優勢 1.是什么 Vuex 是一個 Vue 的 狀態管理工具,狀態就是數據。 大白話:Vuex 是一個插件,可以幫我們管理 Vue 通用的數據 (多組件共享的數據)。例如:購…