如何用Deeplearning4j實現GAN

2021-09-29 17:48:45 字數 2601 閱讀 4806

一、gan的思想

gan的核心所做的事情是在解決乙個argminmax的問題,公式:

1、求解乙個discriminator,可以最大尺度的丈量generator 產生的資料和真實資料之間的分布距離

2、求解乙個generator,可以最大程度減小產生資料和真實資料之間的距離

gan的原始公式如下:

實際上,我們不可能真求期望,只能sample出data來近似求解,於是,公式變成如下:

於是,求解v的最大值,變成了乙個二分類問題,變成了求交叉熵的最小值。

二、**

public class gan 

indarray trueexp = train.next().getfeatures();

indarray z = nd4j.rand(new long , new normaldistribution());

multidataset datasetd = new org.nd4j.linalg.dataset.multidataset(new indarray ,

new indarray );

for(int m=0;m<10;m++)

z = nd4j.rand(new long , new normaldistribution());

multidataset datasetg = new org.nd4j.linalg.dataset.multidataset(new indarray ,

new indarray );

traing(net, datasetg);

if (i % 10000 == 0)

} }public static void traind(computationgraph net, multidataset dataset)

public static void traing(computationgraph net, multidataset dataset)

}

說明:

1、dl4j並沒有提供像keras那樣凍結某些層引數的方法,這裡採用設定learningrate為0的方法,來凍結某些層的引數

2、這個的更新器,用的是sgd,不能用其他的(比方說adam、rmsprop),因為這些自適應更新器會考慮前面batch的梯度作為本次更新的梯度,達不到不更新引數的目的

3、這裡用了stackvertex,沿著第一維合併張量,也就是合併真實資料樣本和generator產生的資料樣本,共同訓練discriminator

4、訓練過程中多次update   discriminator的引數,以便量出最大距離,讓後更新generator一次

5、進行10w次迭代

三、generator生成手寫數字

載入訓練好的模型,隨機從normaldistribution取出一些噪音資料,丟給模型,經過feedforward,取出最後一層generator的啟用值,便是我們想要的結果,**如下:

public class loadgan , new normaldistribution()), trueexp }, false);

indarray indarray = map.get("g3");// .reshape(20,28,28);

listlist = new arraylist<>();

for (int j = 0; j < indarray.size(0); j++)

mnistvisualizer bestvisualizer = new mnistvisualizer(1, list, "gan");

bestvisualizer.visualize(); }

public static class mnistvisualizer

public mnistvisualizer(double imagescale, listdigits, string title, int gridwidth)

public void visualize()

frame.add(panel);

frame.setvisible(true);

frame.pack();

} public listgetcomponents()

imageicon orig = new imageicon(bi);

image imagescaled = orig.getimage().getscaledinstance((int) (imagescale * 28), (int) (imagescale * 28),

image.scale_default);

imageicon scaled = new imageicon(imagescaled);

images.add(new jlabel(scaled));

}return images;

} }}

實際效果,還算比較清晰

快樂源於分享。

如何用軟文推廣

如何用軟文推廣呢?2 作為 魚餌 讓客戶通過付出一些行動,比如幫忙推廣10個ip,或者通過加qq,留下郵箱 手機號等方式,獲得大量的精準潛在客戶資料庫,最大化軟文的效率。高質量軟文製作技巧 寫作軟文前,一定要做好規劃,明確軟文推廣要達到的目的,了解消費者的對產品的各種問題和顧慮,針對性的提出解決方案...

如何用gitbook寫書

生成一本小書,它有前言,章節1,章節2,後記。例如 簡介 第一章 如何造火箭 1.燃料學 2.空氣動力學 3.工程學 第二章 如何 火箭 1.自動控制原理 2.二次利用要點 結束建乙個寫書的目錄,以後所有工作都在這個目錄下搞。例如 users raywill gitbook first在電腦上建立整...

如何用好Google?

如何提高自己的搜尋技術?男性凱格爾運動 掌握搜尋邏輯和搜尋思路。願意為優質的付費是高效的解決問題思路。盡量少使用搜尋引擎 針對不同的問題使用不同的資料庫。搜尋心法 找什麼 找 怎麼找。搜尋技巧 遇到問題 第一件事就是搜尋 搜尋。搜尋也是可以轉變思維方式 書友沙龍 可直接看轉化為 樊登讀書會 舉辦的讀...