深度學(xué)習(xí)與圖像處理實(shí)戰(zhàn)-ACGAN 生成帶標(biāo)簽圖片_第1頁(yè)
深度學(xué)習(xí)與圖像處理實(shí)戰(zhàn)-ACGAN 生成帶標(biāo)簽圖片_第2頁(yè)
深度學(xué)習(xí)與圖像處理實(shí)戰(zhàn)-ACGAN 生成帶標(biāo)簽圖片_第3頁(yè)
深度學(xué)習(xí)與圖像處理實(shí)戰(zhàn)-ACGAN 生成帶標(biāo)簽圖片_第4頁(yè)
深度學(xué)習(xí)與圖像處理實(shí)戰(zhàn)-ACGAN 生成帶標(biāo)簽圖片_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ACGAN生成帶標(biāo)簽圖片深度學(xué)習(xí)與圖像處理實(shí)戰(zhàn)知識(shí)要點(diǎn)12.1ACGAN簡(jiǎn)介12.2數(shù)據(jù)集介紹及處理12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練12.4模型訓(xùn)練結(jié)果測(cè)試目錄12.1ACGAN簡(jiǎn)介訓(xùn)練分類的前提是收集足夠多的各種分類的數(shù)據(jù)用來訓(xùn)練,但如果數(shù)據(jù)來源少,無法訓(xùn)練怎么辦?ACGAN的一個(gè)用途就是生成多分類增強(qiáng)數(shù)據(jù),只要每種分類數(shù)據(jù)有2000張以上就能進(jìn)行訓(xùn)練并生成指定分類的數(shù)據(jù)。ACGAN的工作原理如圖所示。ACGAN的工作原理DCGAN中只有Z,即將噪聲作為輸入變量,ACGAN則多了一個(gè)分類變量。DCGAN只輸出圖片的真假判斷,而ACGAN除了真假判斷外還增加了類別判斷。12.2數(shù)據(jù)集介紹及處理

本章使用手寫數(shù)字?jǐn)?shù)據(jù)集MNIST作為數(shù)據(jù)集,MNIST數(shù)據(jù)集在第11章已經(jīng)有過簡(jiǎn)短的介紹。MNIST數(shù)據(jù)集的處理較為簡(jiǎn)單,直接在模型訓(xùn)練前處理即可。12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練通過第11章的介紹可以知道GAN是由生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)組成的,接下來就先搭建生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)。生成網(wǎng)絡(luò)的輸入是一個(gè)帶標(biāo)簽的隨機(jī)數(shù),具體操作方式是生成一個(gè)N維的正態(tài)分布隨機(jī)數(shù),再利用嵌入(Embedding)層將正整數(shù)(對(duì)應(yīng)分類索引)轉(zhuǎn)換為N維的稠密向量,并將這個(gè)稠密向量與N維的正態(tài)分布隨機(jī)數(shù)相乘,然后將輸入的數(shù)(噪聲)改變形狀后利用上采樣與卷積生成圖像,具體代碼如下。01OPTIONdefgen(noise_len=100):'''生成網(wǎng)絡(luò):多輸入單輸出模型。輸入圖片標(biāo)簽和噪聲,輸出生成的圖片:paramnoise_len::return:'''inpt=k.Input((noise_len,))label=k.Input(shape=(1,),dtype='int32')label_embedding=Flatten()(Embedding(10,100)(label))#組合2個(gè)輸入inp=Add()([inpt,label_embedding])搭建生成網(wǎng)絡(luò)12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練x=Dense(32*7*7,activation='relu')(inp)x=Reshape((7,7,32))(x)x=Conv2D(64,kernel_size=3,padding='same')(x)x=BatchNormalization(momentum=0.8)(x)x=Activation('relu')(x)x=UpSampling2D()(x)x=Conv2D(128,kernel_size=3,padding='same')(x)x=BatchNormalization(momentum=0.8)(x)x=Activation('relu')(x)x=UpSampling2D()(x)x=Conv2D(64,kernel_size=3,padding='same')(x)x=BatchNormalization(momentum=0.8)(x)x=Activation('relu')(x)#回歸到單通道x=Conv2D(1,kernel_size=3,padding='same')(x)x=Activation('tanh')(x)returnk.models.Model([inpt,label],x)12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練defdis():'''判別網(wǎng)絡(luò):?jiǎn)屋斎攵噍敵鼋Y(jié)構(gòu)。輸入圖片,輸出圖片真假和標(biāo)簽:return:'''input=k.Input((28,28,1))x=Conv2D(32,kernel_size=3,strides=2,padding='same')(input)x=LeakyReLU(0.2)(x)#x=BatchNormalization(momentum=0.8)(x)x=Dropout(0.25)(x)普通GAN的判別網(wǎng)絡(luò)用于根據(jù)輸入的圖片判斷出真?zhèn)?。在ACGAN中,其不僅要判斷出真?zhèn)危€要判斷出種類。因此它的輸入是一個(gè)28×28×1的圖片,輸出有兩個(gè):一個(gè)是0~1的數(shù),1代表判斷這個(gè)圖片是真的,0代表判斷這個(gè)圖片是假的;另一個(gè)是一個(gè)向量,用于判斷這張圖片屬于什么類別,具體代碼如下。02OPTION搭建判別網(wǎng)絡(luò)12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練x=Conv2D(64,kernel_size=3,strides=2,padding='same')(x)x=LeakyReLU(0.2)(x)x=Dropout(0.25)(x)x=BatchNormalization(momentum=0.8)(x)x=ZeroPadding2D(((0,1),(0,1)))(x)x=Conv2D(128,kernel_size=3,strides=2,padding='same')(x)x=LeakyReLU(0.2)(x)x=Dropout(0.25)(x)x=BatchNormalization(momentum=0.8)(x)x=Conv2D(128,kernel_size=3,strides=1,padding='same')(x)x=LeakyReLU(0.2)(x)x=Dropout(0.25)(x)#使用全局平均池化代替Flattenx=GlobalAveragePooling2D()(x)#二分類,使用Sigmoidx1=Dense(1,activation='sigmoid')(x)#輸出標(biāo)簽label=Dense(10,activation='softmax')(x)returnk.models.Model(input,[x1,label])12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練接下來編寫訓(xùn)練函數(shù),思路如下。03OPTION編寫訓(xùn)練函數(shù)(1)隨機(jī)選取batch_size張真實(shí)的圖片和它的標(biāo)簽。(2)隨機(jī)生成batch_size個(gè)N維向量和其對(duì)應(yīng)的標(biāo)簽,利用嵌入層進(jìn)行組合,傳入生成器(Generator)中生成batch_size張?zhí)摷賵D片。(3)判別器(Discriminator)的損失函數(shù)由兩部分組成,一部分是真?zhèn)蔚呐袛嘟Y(jié)果與真實(shí)情況的對(duì)比,另一部分是圖片所屬標(biāo)簽的判斷結(jié)果與真實(shí)情況的對(duì)比。(4)生成器的損失函數(shù)也由兩部分組成,一部分是生成的圖片是否被判別器判斷為1,另一部分是生成的圖片是否被分成了正確的類別。12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練deftrain(batch_size=128,epochs=10000,noise_len=100):dis_model=dis()k.utils.plot_model(dis_model,'dis.png',show_shapes=True)#有2個(gè)輸出,需要2個(gè)損失函數(shù)dis_pile(loss=['binary_crossentropy','sparse_categorical_crossentropy'],optimizer=k.optimizers.Adam(lr=0.0002),metrics=['acc'])gen_model=gen()#gen_model.summary()k.utils.plot_model(gen_model,'gen.png',show_shapes=True)#組合一個(gè)新的網(wǎng)絡(luò),輸入噪聲和標(biāo)簽#使用生成器生成圖片后,放入判別器生成圖片真假判斷和標(biāo)簽#使用判別器判別圖片,輸出最終判別結(jié)果z=k.Input(shape=(noise_len,))label=k.Input(shape=(1,))img=gen_model([z,label])dis_model.trainable=Falsevalid,target_label=dis_model(img)具體實(shí)現(xiàn)代碼如下。12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練combined=k.models.Model([z,label],[valid,target_label])pile(loss=['binary_crossentropy','sparse_categorical_crossentropy'],optimizer=k.optimizers.Adam(lr=0.0002))#加載數(shù)據(jù)集(x_train,y_train),(_,_)=k.datasets.mnist.load_data()#將數(shù)據(jù)壓縮到(-1,1)x_train=x_train/127.5-1.x_train=np.array(x_train).reshape(-1,28,28,1)

y_train=y_train.reshape(-1,1)

#組裝真假標(biāo)簽true=np.ones((batch_size,1))fake=np.zeros((batch_size,1))forepochinrange(epochs):#隨機(jī)讀取一個(gè)batch_size的圖片數(shù)據(jù)idx=np.random.randint(0,x_train.shape[0],batch_size)imgs,label=x_train[idx],y_train[idx]12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練#隨機(jī)生成一個(gè)batch_size的噪聲,以及一個(gè)batch_size的虛假標(biāo)簽數(shù)據(jù)noise=np.random.normal(0,1,(batch_size,noise_len))sampled_labels=np.random.randint(0,10,(batch_size,1))#使用生成器生成圖片gen_imgs=gen_model.predict([noise,sampled_labels])#訓(xùn)練判別器d_loss_real=dis_model.train_on_batch(imgs,[true,label])d_loss_fake=dis_model.train_on_batch(gen_imgs,[fake,sampled_labels])d_loss=0.5*np.add(d_loss_real,d_loss_fake)#訓(xùn)練生成器,此時(shí)判別器為不訓(xùn)練的狀態(tài)g_loss=combined.train_on_batch([noise,sampled_labels],[true,sampled_labels])print(epoch,d_loss[0],d_loss[1]*100,g_loss)ifepoch%100==0:sample_images(epoch,gen_model)12.3主干網(wǎng)絡(luò)搭建與訓(xùn)練最后,編寫sample_images函數(shù),將生成的圖片與標(biāo)簽一

一對(duì)應(yīng),然后保存成圖片,代碼如下。04OPTION編寫sample_images函數(shù)defsample_images(epoch,model):r,c=2,5noise=np.random.normal(0,1,(r*c,100))sampled_labels=np.arange(0,10).reshape(-1,1)gen_imgs=model.predict([noise,sampled_labels])gen_imgs=0.5*gen_imgs+0.5fig,axs=plt.subplots(r,c)cnt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論