1.自己敲了一個簡單的gan
生成minist手寫數字
對gan的一些體會:
①gan模型,實際上是一個“無監督學習”的過程
i. 因傳統的機器學習模型實際上都指定了模型的分佈(除了深度學習),然後在人的監督下去學習這個分佈。
而gan卻可以隱式的去自己學習這個分佈(因爲gan只是一個讓生成結果趨向於真的過程,具體的模型分佈是 沒有定義的)。
ii.並且gan可以隱式的去學習合適的損失函數。
②gan模型,實際上就是一個“相互博弈”的過程
這是gan原始論文所用的loss函數:
最後的結果,將會是D.fake也會趨近於1,而造成梯度消失,最後達到納什均衡
一些代碼上的新知識:
①logits不是label,而是“模型輸出的結果”
②session.run(),
i.run的時候需要注意,把這個run的過程所需要的所有的placeholder都給填進去
ii.run的時候可以看到,run了一個list,這實際上代表的是列表中的函數同時執行,也就是在同一輪執行
如果寫成sess.run(d_solver)
sess.run(d_loss)
這代表的實際上,運行了兩輪,d_loss實際上得到的是第二輪的
iii.爲啥不只運行一個D_solver呢?因爲你需要取得loss的值,但是D_solver的返回值中沒有loss
iv.run的返回值:是列表中每一個函數的返回值,圖中的_與D_loss_curr就分別是是D_solver和D_loss的返回值
③tf.log()
這個函數是對矩陣中每一個元素取ln,如a=[e,e,e²],那tf.log(a)=[1,1,2],保持原來的維度
③tf.reduce_mean()
終於有了一定的瞭解,
reduce_mean(),常常不用axis這個參數,因爲如果這個參數不用,那reduce_mean()默認會對矩陣中所有元素的加a 和求平均值,如上圖中的代碼,結果是[8,7,5,0.6,0.8……],的可以說是“每一張G產生的圖片判斷爲真的概率和 label=1之間的距離”,然後把這些距離取平均,這實際上是一個“式子”,即如(a1+a2+a3+……)/n,而每一個a實際上又 對應了一個含有未知數的式子,因爲TensorFlow中的adam優化器傳入的實際上是“一個數loss”而非一個矩陣,故取 reduce_mean之後,便於去求梯度。
用了簡單的全連接神經網絡,具體代碼見
https://blog.csdn.net/stalbo/article/details/79356739
確定了學習目標:
①先看完deep learning with python。好好學一下框架
②學《21個項目》,掌握tf
③把知識圖譜的課看完,同時多敲一些gan的實例
④爭取把圖譜補全的那個論文整完