真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

云計算必備知識-基于PyTorch機器學習構(gòu)建生成對抗網(wǎng)絡(luò)

生成式對抗網(wǎng)絡(luò)(GAN, Generative Adversarial Networks )是一種深度學習模型,是近年來復(fù)雜分布上無監(jiān)督學習最具前景的方法之一。模型通過框架中(至少)兩個模塊:生成模型(Generative Model)和判別模型(Discriminative Model)的互相博弈學習產(chǎn)生相當好的輸出。原始 GAN 理論中,并不要求 G 和 D 都是神經(jīng)網(wǎng)絡(luò),只需要是能擬合相應(yīng)生成和判別的函數(shù)即可。但實用中一般均使用深度神經(jīng)網(wǎng)絡(luò)作為 G 和 D 。一個優(yōu)秀的GAN應(yīng)用需要有良好的訓練方法,否則可能由于神經(jīng)網(wǎng)絡(luò)模型的自由性而導致輸出不理想。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),阿拉善盟企業(yè)網(wǎng)站建設(shè),阿拉善盟品牌網(wǎng)站建設(shè),網(wǎng)站定制,阿拉善盟網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,阿拉善盟網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

生成對抗網(wǎng)絡(luò)被廣泛應(yīng)用于廣告、游戲、娛樂、媒體、制藥等行業(yè),可以用來創(chuàng)造虛構(gòu)的人物、場景,模擬人臉老化,圖像風格變換,以及產(chǎn)生化學分子式等等。下面兩張圖片,分別展示了圖片到圖片轉(zhuǎn)換的效果,以及基于語義布局合成景物的效果。

本文將引領(lǐng)讀者,從工程實踐角度出發(fā),借助 AWS 機器學習相關(guān)云計算服務(wù),基于 PyTorch 機器學習框架,構(gòu)建第一個生成對抗網(wǎng)絡(luò),開啟全新的、有趣的機器學習和人工智能體驗。

還等什么,讓我們馬上開始吧!

主要內(nèi)容 課題及方案概覽 模型的開發(fā)環(huán)境 生成對抗網(wǎng)絡(luò)模型 模型的訓練和驗證 結(jié)論與總結(jié) 課題及方案概覽

下面顯示的兩組手寫體數(shù)字圖片,您是否能從中夠辨認出由計算機生成的『手寫』字體是其中哪一組?

本文的課題是用機器學習方法『模仿手寫字體』,為了完成這個課題,您將親手體驗生成對抗網(wǎng)絡(luò)的設(shè)計和實現(xiàn)?!耗7率謱懽煮w』與人像生成的基本原理和工程流程基本是一致的,雖然它們的復(fù)雜性和精度要求有一定差距,但是通過解決『模仿手寫字體』問題,可以為生成對抗網(wǎng)絡(luò)的原理和工程實踐打下基礎(chǔ),進而可以逐步嘗試和探索更加復(fù)雜先進的網(wǎng)絡(luò)架構(gòu)和應(yīng)用場景。

《生成對抗網(wǎng)絡(luò)》(GAN)由 Ian Goodfellow 等人在 2014年提出,它是一種深度神經(jīng)網(wǎng)絡(luò)架構(gòu),由一個生成網(wǎng)絡(luò)和一個判別網(wǎng)絡(luò)組成。生成網(wǎng)絡(luò)產(chǎn)生『假』數(shù)據(jù),并試圖欺騙判別網(wǎng)絡(luò);判別網(wǎng)絡(luò)對生成數(shù)據(jù)進行真?zhèn)舞b別,試圖正確識別所有『假』數(shù)據(jù)。在訓練迭代的過程中,兩個網(wǎng)絡(luò)持續(xù)地進化和對抗,直到達到平衡狀態(tài)(參考:納什均衡),判別網(wǎng)絡(luò)無法再識別『假』數(shù)據(jù),訓練結(jié)束。

2016年,Alec Radford 等發(fā)表的論文 《深度卷積生成對抗網(wǎng)絡(luò)》(DCGAN)中,開創(chuàng)性地將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到生成對抗網(wǎng)絡(luò)的模型算法設(shè)計當中,替代了全鏈接層,提高了圖片場景里訓練的穩(wěn)定性。

Amazon SageMaker 是 AWS 完全托管的機器學習服務(wù),數(shù)據(jù)處理和機器學習訓練工作可以通過 Amazon SageMaker 快速、輕松地完成,訓練好的模型可以直接部署到全托管的生產(chǎn)環(huán)境中。Amazon SageMaker 提供了托管的 Jupyter Notebook 實例,通過 SageMaker SDK 與 AWS 的多種云服務(wù)集成,方便您訪問數(shù)據(jù)源,進行探索和分析。SageMaker SDK 是一套開放源代碼的 Amazon SageMaker 的開發(fā)包,可以協(xié)助您很好的使用 Amazon SageMaker 提供的托管容器鏡像,以及 AWS 的其他云服務(wù),如計算和存儲資源。

如上圖所示,訓練用數(shù)據(jù)將來自 Amazon S3 的存儲桶;訓練用的框架和托管算法以容器鏡像的形式提供服務(wù),在訓練時與代碼結(jié)合;模型代碼運行在 Amazon SageMaker 托管的計算實例中,在訓練時與數(shù)據(jù)結(jié)合;訓練輸出物將進入 Amazon S3 專門的存儲桶里。后面的講解中,我們會了解到如何通過 SageMaker SDK 使用這些資源。

我們將用到 Amazon SageMaker、Amazon S3 、Amazon EC2 等 AWS 服務(wù),會產(chǎn)生一定的云資源使用費用。

模型的開發(fā)環(huán)境 創(chuàng)建Notebook實例

請打開 Amazon SageMaker 的儀表板(點擊打開 北京區(qū)域 | 寧夏區(qū)域 ),請點擊Notebook instances按鈕進入筆記本實例列表。

如果您是第一次使用Amazon SageMaker,您的Notebook instances列表將顯示為空列表,此時您需點擊Create notebook instance按鈕來創(chuàng)建全新 Jupyter Notebook 實例。

進入Create notebook instance頁面后,請在Notebook instance name字段里輸入實例名字,本文將使用 MySageMakerInstance 作為實例名,您可以選用您認為合適的名字。本文將使用默認的實例類型,因此Notebook instance type選項將保持為 *ml.t2.medium*。如果您是第一次使用Amazon SageMaker,您需要創(chuàng)建一個 IAM role,以便筆記本實例能夠訪問 Amazon S3 服務(wù)。請在IAM role選項點擊為 Create a new role。Amazon SageMaker 將創(chuàng)建一個具有必要權(quán)限的角色,并將這個角色分配給正在創(chuàng)建的實例。另外,根據(jù)您的實際情況,您也可以選擇一個已經(jīng)存在的角色。

在Create an IAM role彈出窗口里,您可以選擇 *Any S3 bucket*,這樣筆記本實例將能夠訪問您賬戶里的所有桶。另外,根據(jù)您的需要,您還可以選擇Specific S3 buckets并輸入桶名。點擊Create role按鈕,這個新角色將被創(chuàng)建。

此時,可以看到 Amazon SageMaker 為您創(chuàng)建了一個名字類似 * AmazonSageMaker-ExecutionRole-**** 的角色。對于其他字段,您可以使用默認值,請點擊Create notebook instance按鈕,創(chuàng)建實例。

回到Notebook instances頁面,您會看到 MySageMakerInstance 筆記本實例顯示為 Pending 狀態(tài),這個將持續(xù)2分鐘左右,直到轉(zhuǎn)為 InService 狀態(tài)。

編寫第一行代碼

點擊Open JupyterLab鏈接,在新的頁面里,您將看到熟悉的 Jupyter Notebook 加載界面。本文默認以 JupyterLab 筆記本作為工程環(huán)境,根據(jù)您的需要,可以選擇使用傳統(tǒng)的 Jupyter 筆記本。

您將通過點擊conda_pytorch_p36, 筆記本圖標來創(chuàng)建一個叫做 Untitled.ipynb 的筆記本,您可以稍后更改它的名字。另外,您也可以通過 File > New > Notebook 菜單路徑,并選擇 conda_pytorch_p36 作為 Kernel 來創(chuàng)建這個筆記本。

在新建的 Untitled.ipynb 筆記本里,我們將輸入第一行指令如下,

importtorchprint(fHelloPyTorch{torch.__version__}) 源代碼下載

請在筆記本中輸入如下指令,下載代碼到實例本地文件系統(tǒng)。

下載完成后,您可以通過File browser瀏覽源代碼結(jié)構(gòu)。

本文涉及到的代碼和筆記本均通過 Amazon SageMaker 托管的 Python 3.6、PyTorch 1.4 和 JupyterLab 驗證。本文涉及到的代碼和筆記本可以通過 這里獲取。

生成對抗網(wǎng)絡(luò)模型 算法原理

DCGAN模型的生成網(wǎng)絡(luò)包含10層,它使用跨步轉(zhuǎn)置卷積層來提高張量的分辨率,輸入形狀為 (batchsize, 100) ,輸出形狀為 (batchsize, 64, 64, 3)。換句話說,生成網(wǎng)絡(luò)接受噪聲向量,然后經(jīng)過不斷變換,直到生成最終的圖像。

判別網(wǎng)絡(luò)也包含10層,它接收 (64, 64, 3) 格式的圖片,使用2D卷積層進行下采樣,最后傳遞給全鏈接層進行分類,分類結(jié)果是 1 或 0,即真與假。

DCGAN 模型的訓練過程大致可以分為三個子過程。

首先, Generator 網(wǎng)絡(luò)以一個隨機數(shù)作為輸入,生成一張『假』圖片;接下來,分別用『真』圖片和『假』圖片訓練 Discriminator 網(wǎng)絡(luò),更新參數(shù);最后,更新 Generator 網(wǎng)絡(luò)參數(shù)。

代碼分析

項目目錄 byos-pytorch-gan 的文件結(jié)構(gòu)如下,

文件 model.py 中包含 3 個類,分別是 生成網(wǎng)絡(luò) Generator 和 判別網(wǎng)絡(luò) Discriminator。

classGenerator(nn.Module):...classDiscriminator(nn.Module):...classDCGAN(object):AwrapperclassforGeneratorandDiscriminator,\'train_step\'methodisforsinglebatchtraining....

文件 train.py 用于 Generator 和 Discriminator 兩個神經(jīng)網(wǎng)絡(luò)的訓練,主要包含以下幾個方法,

defparse_args():...defget_datasets(dataset_name,...):...deftrain(dataloader,hps,...):... 模型的調(diào)試

開發(fā)和調(diào)試階段,可以從 Linux 命令行直接運行 train.py 腳本。超參數(shù)、輸入數(shù)據(jù)通道、模型和其他訓練產(chǎn)出物存放目錄都可以通過命令行參數(shù)指定。

pythondcgan/train.py--datasetqmnist--model-dir\'/home/myhome/byom-pytorch-gan/model\'--output-dir\'/home/myhome/byom-pytorch-gan/tmp\'--data-dir\'/home/myhome/byom-pytorch-gan/data\'--hps\'{beta1:0.5,dataset:qmnist,epochs:15,learning-rate:0.0002,log-interval:64,nc:1,nz:100,sample-interval:100}\'

這樣的訓練腳本參數(shù)設(shè)計,既提供了很好的調(diào)試方法,又是與 SageMaker Container 集成的規(guī)約和必要條件,很好的兼顧了模型開發(fā)的自由度和訓練環(huán)境的可移植性。

模型的訓練和驗證

請查找并打開名為 dcgan.ipynb 的筆記本文件,訓練過程將由這個筆記本介紹并執(zhí)行,本節(jié)內(nèi)容代碼部分從略,請以筆記本代碼為準。

互聯(lián)網(wǎng)環(huán)境里有很多公開的數(shù)據(jù)集,對于機器學習的工程和科研很有幫助,比如算法學習和效果評價。我們將使用 QMNIST 這個手寫字體數(shù)據(jù)集訓練模型,最終生成逼真的『手寫』字體效果圖樣。

數(shù)據(jù)準備

PyTorch 框架的 torchvision.datasets 包提供了QMNIST 數(shù)據(jù)集,您可以通過如下指令下載 QMNIST 數(shù)據(jù)集到本地備用。

fromtorchvisionimportdatasetsdataroot=\'./data\'trainset=datasets.QMNIST(root=dataroot,train=True,download=True)testset=datasets.QMNIST(root=dataroot,train=False,download=True)

Amazon SageMaker 為您創(chuàng)建了一個默認的 Amazon S3 桶,用來存取機器學習工作流程中可能需要的各種文件和數(shù)據(jù)。 我們可以通過 SageMaker SDK 中 sagemaker.session.Session 類的 default_bucket 方法獲得這個桶的名字。

fromsagemaker.sessionimportSessionsess=Session()#S3bucketforsavingcodeandmodelartifacts.#Feelfreetospecifyadifferentbuckethereifyouwish.bucket=sess.default_bucket()

SageMaker SDK 提供了操作 Amazon S3 服務(wù)的包和類,其中 S3Downloader 類用于訪問或下載 S3 里的對象,而 S3Uploader 則用于將本地文件上傳至 S3。您將已經(jīng)下載的數(shù)據(jù)上傳至 Amazon S3,供模型訓練使用。模型訓練過程不要從互聯(lián)網(wǎng)下載數(shù)據(jù),避免通過互聯(lián)網(wǎng)獲取訓練數(shù)據(jù)的產(chǎn)生的網(wǎng)絡(luò)延遲,同時也規(guī)避了因直接訪問互聯(lián)網(wǎng)對模型訓練可能產(chǎn)生的安全風險。

fromsagemaker.s3importS3Uploaderass3ups3_data_location=s3up.upload(f{dataroot}/QMNIST,fs3://{bucket}/data/qmnist) 訓練執(zhí)行

通過 sagemaker.getexecutionrole() 方法,當前筆記本可以得到預(yù)先分配給筆記本實例的角色,這個角色將被用來獲取訓練用的資源,比如下載訓練用框架鏡像、分配 Amazon EC2 計算資源等等。

訓練模型用的超參數(shù)可以在筆記本里定義,實現(xiàn)與算法代碼的分離,在創(chuàng)建訓練任務(wù)時傳入超參數(shù),與訓練任務(wù)動態(tài)結(jié)合。

hps={learning-rate:0.0002,epochs:15,dataset:qmnist,beta1:0.5,sample-interval:200,log-interval:64}

sagemaker.pytorch 包里的 PyTorch 類是基于 PyTorch 框架的模型擬合器,可以用來創(chuàng)建、執(zhí)行訓練任務(wù),還可以對訓練完的模型進行部署。參數(shù)列表中, train_instance_type 用來指定CPU或者GPU實例類型,訓練腳本和包括模型代碼所在的目錄通過 source_dir 指定,訓練腳本文件名必須通過 entry_point 明確定義。這些參數(shù)將和其余參數(shù)一起被傳遞給訓練任務(wù),他們決定了訓練任務(wù)的運行環(huán)境和模型訓練時參數(shù)。

fromsagemaker.pytorchimportPyTorchestimator=PyTorch(role=role,entry_point=\'train.py\',source_dir=\'dcgan\',output_path=s3_model_artifacts_location,code_location=s3_custom_code_upload_location,train_instance_count=1,train_instance_type=\'ml.c5.xlarge\',train_use_spot_instances=True,train_max_wait=86400,framework_version=\'1.4.0\',py_version=\'py3\',hyperparameters=hps)

請?zhí)貏e注意 train_use_spot_instances 參數(shù),True 值代表您希望優(yōu)先使用 SPOT 實例。由于機器學習訓練工作通常需要大量計算資源長時間運行,善用 SPOT 可以幫助您實現(xiàn)有效的成本控制,SPOT 實例價格可能是按需實例價格的 20% 到 60%,依據(jù)選擇實例類型、區(qū)域、時間不同實際價格有所不同。

您已經(jīng)創(chuàng)建了 PyTorch 對象,下面可以用它來擬合預(yù)先存在 Amazon S3 上的數(shù)據(jù)了。下面的指令將執(zhí)行訓練任務(wù),訓練數(shù)據(jù)將以名為QMNIST的輸入通道的方式導入訓練環(huán)境。訓練開始執(zhí)行過程中,Amazon S3 上的訓練數(shù)據(jù)將被下載到模型訓練環(huán)境的本地文件系統(tǒng),訓練腳本 train.py 將從本地磁盤加載數(shù)據(jù)進行訓練。

#Starttrainingestimator.fit({\'QMNIST\':s3_data_location},wait=False)

根據(jù)您選擇的訓練實例不同,訓練過程中可能持續(xù)幾十分鐘到幾個小時不等。建議設(shè)置 wait 參數(shù)為 False ,這個選項將使筆記本與訓練任務(wù)分離,在訓練時間長、訓練日志多的場景下,可以避免筆記本上下文因為網(wǎng)絡(luò)中斷或者會話超時而丟失。訓練任務(wù)脫離筆記本后,輸出將暫時不可見,可以執(zhí)行如下代碼,筆記本將獲取并載入此前的訓練回話,

%%timefromsagemaker.estimatorimportEstimator#Attachingprevioustrainingsessiontraining_job_name=estimator.latest_training_job.nameattached_estimator=Estimator.attach(training_job_name)

由于的模型設(shè)計考慮到了GPU對訓練加速的能力,所以用GPU實例訓練會比CPU實例快一些,例如,p3.2xlarge 實例大概需要15分鐘左右,而 c5.xlarge 實例則可能需要6小時以上。目前模型不支持分布、并行訓練,所以多實例、多CPU/GPU并不會帶來更多的訓練速度提升。

訓練完成后,模型將被上傳到 Amazon S3 里,上傳位置由創(chuàng)建 PyTorch 對象時提供的 output_path 參數(shù)指定。

模型的驗證

您將從 Amazon S3 下載經(jīng)過訓練的模型到筆記本所在實例的本地文件系統(tǒng),下面的代碼將載入模型,然后輸入一個隨機數(shù),獲得推理結(jié)果,以圖片形式展現(xiàn)出來。執(zhí)行如下指令加載訓練好的模型,并通過這個模型產(chǎn)生一組『手寫』數(shù)字字體。

fromhelperimport*importmatplotlib.pyplotaspltimportnumpyasnpimporttorchfromdcgan.modelimportGeneratordevice=torch.device(cuda:0iftorch.cuda.is_available()elsecpu)params={\'nz\':nz,\'nc\':nc,\'ngf\':ngf}model=load_model(Generator,params,./model/generator_state.pth,device=device)img=generate_fake_handwriting(model,batch_size=batch_size,nz=nz,device=device)plt.imshow(np.asarray(img))

結(jié)論與總結(jié)

近些年成長快速的 PyTorch 框架正在得到廣泛的認可和應(yīng)用,越來越多的新模型采用 PyTorch 框架,也有模型被遷移到 PyTorch 上,或者基于 PyTorch 被完整再實現(xiàn)。生態(tài)環(huán)境持續(xù)豐富,應(yīng)用領(lǐng)域不斷拓展,PyTorch 已成為事實上的主流框架之一。Amazon SageMaker 與多種 AWS 服務(wù)緊密集成,比如,各種類型和尺寸的 Amazon EC2 計算實例、Amazon S3、Amazon ECR 等等,為機器學習工程實踐提供了端到端的、一致的體驗。Amazon SageMaker 持續(xù)支持主流機器學習框架,PyTorch 是這其中之一。用 PyTorch 開發(fā)的機器學習算法和模型,可以輕松移植到 Amazon SageMaker 的工程和服務(wù)環(huán)境里,進而利用 Amazon SageMaker 全托管的 Jupyter Notebook、訓練容器鏡像、服務(wù)容器鏡像、訓練任務(wù)管理、部署環(huán)境托管等功能,簡化機器學習工程復(fù)雜度,提高生產(chǎn)效率,降低運維成本。

DCGAN 是生成對抗網(wǎng)絡(luò)領(lǐng)域中具里程碑意義的一個,是現(xiàn)今很多復(fù)雜生成對抗網(wǎng)絡(luò)的基石。文首提到的 StyleGAN,用文本合成圖像的 StackGAN,從草圖生成圖像的Pix2pix,以及互聯(lián)網(wǎng)上爭議不斷的 DeepFakes 等等,都有DCGAN的影子。相信通過本文的介紹和工程實踐,對您了解生成對抗網(wǎng)絡(luò)的原理和工程方法會有所幫助。


分享名稱:云計算必備知識-基于PyTorch機器學習構(gòu)建生成對抗網(wǎng)絡(luò)
地址分享:http://weahome.cn/article/cjjjei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部