神經網絡中的分類器該如何改成生成器?

2020-12-05 CSDN

作者 | 李秋鍵

責編 | 劉靜

引言: 相信我們都做過一些圖片分類或者是其他分類的項目,我們知道神經網絡是在w和b參數調節基礎上,使得x與y達到對應輸出的效果。比如最經典的Mnist手寫字體識別,給一張圖片模型判斷後將會輸出數字結果,比如這樣:

我們知道大多數生成網絡是用的GAN算法,顯然他有他自己的優勢,

通過對目的的改進,可以變更機率分解建模的變量,使隨機變量與具體數據分布儘量相似。在現代的分解建模中的,一般使用統計數據的似然作為改進目的,而GAN創新地用於了另一個改進目的。

首先,引進判斷建模(常見建模還包括反對矢量機和多層人工神經網絡)。

其次,其改進步驟是在分解建模和判斷建模兩者之間尋找沃克平衡。

GAN創建的自學構建實質上是分解建模和判斷建模兩者之間的仿真博弈論。

分解建模的目標是儘量多地仿真、仿真和自學現實統計數據的產於規律性。

判斷建模是辨別一個輸出統計數據是來自現實的數據分布還是分解的建模。

通過這兩個外部建模兩者之間的停滯市場競爭,提升了分解和區別這兩個建模的戰鬥能力。如果分解的建模統計數據依然不存在誤解,無法準確辨別,那麼我們指出分解的建模實質上早已理解了現實統計數據的狀況。

與其它算法比起,GAN能製造出有更加明晰、現實的樣本

下面我們將對我們的項目進行演示講解

通過程序調試可以知道,它的輸入端是x,為多行784列的矩陣,而輸出端是多行10列的矩陣為onehot編碼形式,即[0,0,0,1,0,0,0,0,0,0]這種形式。

那麼我們不妨設想,如果把x換成[0,0,0,1,0,0,0,0,0,0]形式,而輸出端換成多行784列的矩陣又將如何呢,下面我們將對其進行修改演示。

首先導入相關的庫:

from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_function#構建TensorFlow模型import tensorflow as tfimport sysimport numpy as npfrom matplotlib import pyplot as pltfrom tensorflow.examples.tutorials.mnist import input_data

讀入數據:

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)print(mnist)

下面是定義變量和佔位符,注意看我的修改:

x = tf.placeholder("float", [None, 10])#佔位符W = tf.Variable(tf.zeros([10,784]))#賦值變量,生成784*10的矩陣,內容全為零b = tf.Variable(tf.zeros([784]))#同上理y = tf.nn.softmax(tf.matmul(x,W) + b)#將x*W+b公式計算的結果藉助softmax激活函數分類y_ = tf.placeholder("float", [None,784])#佔位符,生成10列的矩陣,行數自適應

很顯然在上面我們把x輸入改成了[0,0,0,1,0,0,0,0,0,0]形式,而y則是多行784列的矩陣,為了滿足矩陣相乘的條件,把w和b也對應互換。

下面我們就用最簡單的算法進行實現,因為我們只是在試探生成器的原理,至於是用神經網絡算法還是卷積等等最後按照自己需求修改即可。

分別定義短時函數,優化器梯度下降,以及會話訓練的準備。

cross_entropy = -tf.reduce_sum(y_*tf.log(y))#定義損失函數為y*logy的算術平均值train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)#梯度下降法減少損失函數的值,優化模型init = tf.initialize_all_variables()#模型初始化。即所有參數初始為0sess = tf.Session()#模型初始化會話sess.run(init)#準備訓練correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))#定義預測準確數,通過對比y真實值和y_預測值的相等的數量accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))#定義準確率為準確率的均方差

然後訓練1000次:

for i in range(1000):#訓練1000次if i % 20 == 0:#每20次向控制臺輸出結果 sys.stdout.write('.') batch_xs, batch_ys = mnist.train.next_batch(100)#訓練批次為100次 sess.run(train_step, feed_dict={y_: batch_xs, x: batch_ys})#建立訓練 ttt=str(sess.run(accuracy, feed_dict={y_: batch_xs, x: batch_ys}))print("訓練第"+str(i)+"次的準確率為"+ttt)

輸出下最終得到的結果,看生成的圖片效果怎麼樣:

print (sess.run(accuracy, feed_dict={y_: mnist.test.images, x: mnist.test.labels}))#測試輸出預測結果'''顯示圖片預測'''x=np.array([[0,1,0,0,0,0,0,0,0,0]])x=tf.cast(x,tf.float32)plt.figure()y=tf.nn.softmax(tf.matmul(x,W) + b)y=y.eval(session=sess)print(y)y=np.reshape(y,[28,28])plt.imshow(y)plt.show()

僅僅是5秒的時間,我們便訓練了1000次生成了圖片,因為是最簡單的線性訓練,測試的是生成數字1的圖片

效果如下圖所示:

很顯然我們5秒生成的圖片效果還不錯,還是挺接近1的。如果你想要更多的效果可以修改生成其他圖片。我們這個項目最簡單的講解了生成器和判別器的互換,讓更多的人不必研究那些深奧的算法即可實現生成圖片。那麼下面我們將生成器做更深的了解。

市面上大多數生成圖片是用的GAN算法,即生成對抗神經網絡,很顯然我們用了如此簡單的算法也可以實現生成圖片的效果。但是不可忽略的是GAN的效果會更好些,但是難度較大。那麼我們將對其中的GAN做個簡單的介紹。

GAN主要的啟發可能是零和的遊戲在概率論觀念,運用於淺自學人工神經網絡,是通過生成器和判斷器(鑑頻器)網路遊戲,從而使S自學數據分布,如果用在影像分解軍事訓練已完成後,S可以從一個哈希分解細緻的影像。

G和D的主要基本功能是:

G是一個生成網,它接管一個隨機噪聲y(哈希),通過雜訊分解影像。

D是一個辨別影像否「現實」的網。它的輸出變量是f, f推選一張照片,輸入E (f)推選f是一張現實照片的機率。如果是1,推選100%現實的影像,如果是0,推選不有可能的影像。

在軍事訓練步驟中的,分解網際網路S的目的是分解儘量多的現實影像來愚弄網際網路E,而E的目的是企圖將S分解的騙影像與現實影像區別。這樣,S和E包含一個靜態的「博弈論步驟」,最後的均衡點為沃克均衡點。

通過對目的的改進,可以變更機率分解建模的變量,使隨機變量與具體數據分布儘量相似。

那麼,如何界定必要的改進目的或傷亡呢?

在現代的分解建模中的,一般使用統計數據的似然作為改進目的,而GAN創新地用於了另一個改進目的。

首先,引進判斷建模(常見建模還包括反對矢量機和多層人工神經網絡)。

其次,其改進步驟是在分解建模和判斷建模兩者之間尋找沃克平衡。

GAN創建的自學構建實質上是分解建模和判斷建模兩者之間的仿真博弈論。

分解建模的目標是儘量多地仿真、仿真和自學現實統計數據的產於規律性。

判斷建模是辨別一個輸出統計數據是來自現實的數據分布還是分解的建模。

通過這兩個外部建模兩者之間的停滯市場競爭,提升了分解和區別這兩個建模的戰鬥能力。

當一個建模具備極強的區別戰鬥能力時。

如果分解的建模統計數據依然不存在誤解,無法準確辨別,那麼我們指出分解的建模實質上早已理解了現實統計數據的產於狀況。

作者簡介: 李秋鍵,CSDN 博客專家,CSDN達人課作者。

聲明:本文系作者獨立觀點,不代表CSDN立場。

相關焦點

  • 何愷明團隊神經結構搜索最新力作:設計隨機連接網絡,效果超ResNet
    generator) 的概念,該生成器封裝了整個網絡生成過程,從而提供了 NAS 和隨機連接網絡的統一視圖。  不過,該研究被指其思想早已在2013年PCA-Net論文中提出過,在算法設計思想方面沒有本質的創新。   何愷明等人的這一新研究到底意義如何?
  • 聊聊11種主要的神經網絡結構
    標準網絡1.感知器感知器是所有神經網絡中最基礎的,是更複雜的神經網絡的基本構建塊。 它僅連接輸入單元和輸出單元。學習輸出神經元的權重,使網絡可以產生和再現特定的時間模式。 該網絡背後的理由來自這樣一個事實,儘管它是非線性的,但訓練過程中唯一修改的權重是突觸連接,因此可以將誤差函數區分為線性系統。
  • 解讀| 如何用進化方法優化大規模圖像分類神經網絡?
    作者:Angulia Chao參與:Joni、侯韻楚、高振讓機器具備生物一樣的進化能力一直是計算機科學的一個熱門研究領域,今年三月份,谷歌的多位研究者提出了一種圖像分類器的大規模進化方法,機器之心也曾報導過這項研究,參閱:《深度 | 谷歌和 OpenAI 新研究:如何使用達爾文進化論輔助設計人工智慧算法?》。
  • 神經網絡實現分類與預測的基本原理
    文章目標:神經網絡特別是深層神經網絡是黑盒的,通過閱讀本文可以讓大家了解神經網絡的基本實現方法、基本數學原理、實現流程等,同時建議初學者從基礎學起,查詢更多的資料豐富認知,有不明白的地方可以關注作者或留言。
  • 初探神經網絡與深度學習 —— 感知器
    【IT168 技術】人工神經網絡的第一個裡程碑是感知機perceptron, 這個名字其實有點誤導, 因為它根本上是做決策的。 一個感知機其實是對神經元最基本概念的模擬 ,都未必有多少網絡概念,他就是一個自動做決策的機器。
  • 神經網絡如何完成表徵?
    眾所周知,它們在解決有關泛化性方面的複雜任務中表現良好。從數學上講,他們非常擅長近似任何的複雜函數。讓我們形象化地理解這種近似概念,而不是前向和後向傳播方法中的最小化預測誤差。假設你了解前向和後向傳播的一點基礎,其旨在藉助梯度和網絡中的錯誤傳播來近似函數。讓我們通過另一種視覺解釋來理解神經網絡的近似能力。其中涉及基礎數學和圖形分析。
  • 用Python實現多層感知器神經網絡
    我將介紹在Python中創建多層感知器(MLP)神經網絡的基本知識。感知器是神經網絡的基本組成部分。感知器的輸入函數是權重,偏差和輸入數據的線性組合。具體來說:in_j = weight input + bias.(in_j =權重輸入+偏差)。在每個感知器上,我們都可以指定一個激活函數g。
  • 基於憶阻器的神經網絡應用研究
    2010年密西根大學盧偉教授團隊[7]提出可以通過操控憶阻器件中離子遷移過程而精細調控器件電導值,率先在Si:Ag憶阻器中實驗模擬實現了突觸權重調節行為和脈衝時序依賴突觸可塑性,從而掀起了憶阻人工神經突觸和神經網絡的研究熱潮。
  • 基於憶阻器的神經網絡應用研究
    至此,關於人工神經網絡的相關研究進入了熱潮。自憶阻器被用作電子突觸器件以來,由於憶阻器中離子的遷移十分類似於神經突觸中神經遞質的擴散過程,於是利用憶阻器來模擬神經網絡中的突觸成為一大趨勢,被廣泛運用在神經網絡中存儲突觸權值。大量的實驗證明,用憶阻器來模擬神經網絡中的突觸將會有很大的前景優勢。
  • 神經網絡有哪些主要分類規則並如何分類?
    神經網絡模型的分類 人工神經網絡的模型很多,可以按照不同的方法進行分類。其中,常見的兩種分類方法是,按照網絡連接的拓樸結構分類和按照網絡內部的信息流向分類。
  • 關於生成式對抗網絡(GAN) 還有這些開放性問題尚未解決
    這是因為鑑別器/發生器的損耗是其參數的非凸函數。但是所有的神經網絡都有這個問題!我們想要找到些方法來專注於解決同時優化所產生的問題。這就引出了我們的第四個問題:什麼時候才能證明GAN是全局收斂的?哪些神經網絡收斂結果可以應用於廣義神經網絡?在這個問題上已經取得了不小的進展。
  • 模型那麼多,該怎麼選擇呢?沒事,這裡有27種神經網絡的圖解
    神經網絡竟有那麼多種?這篇文章將逐一介紹下面這張圖片中的27種神經網絡類型,並嘗試解釋如何使用它們。準備好了嗎?讓我們開始吧!神經網絡的種類越來越多,可以說是在呈指數級地增長。我們需要一個一目了然的圖表,在這些新出現的網絡構架和方法之間進行導航。
  • 深度學習:神經網絡算法的昨天、今天和明天
    2010—2017年,計算機視覺領域每年都會舉行基於這些圖片的分類競賽,ImageNet也因此成為全世界視覺領域機器學習和深度學習算法的試金石。2012年,Geoffrey Hinton在多倫多大學的學生,Alex Krizhevsky,在ImageNet的分類競賽中,通過在兩塊NVIDIA顯卡(GPU)上編寫神經網絡算法而獲得了冠軍,而且其算法的識別率大幅超過第二名。
  • 27種神經網絡簡明圖解:模型那麼多,我該怎麼選?
    神經網絡的種類越來越多,可以說是在呈指數級地增長。這種類型的第一個網絡被稱為約旦網絡(Jordan Network),在網絡中每個隱含神經元會收到它自己的在固定延遲(一次或多次迭代)後的輸出。除此之外,它與普通的模糊神經網絡非常相似。當然,它有許多變化  —  如傳遞狀態到輸入節點,可變延遲等,但主要思想保持不變。
  • 如何得出神經網絡需要多少隱藏層、每層需要多少神經元?
    來源 | 論智(ID:jqr_AI)該使用多少層隱藏層?使用隱藏層的目的是什麼?增加隱藏層/神經元的數目總能給出更好的結果嗎?人工神經網絡(ANN)初學者常常提出這些問題。如果需要解決的問題很複雜,這些問題的答案可能也會比較複雜。希望讀完這篇文章後,你至少可以知道如何回答這些問題。
  • 神經網絡中容易被忽視的基礎知識
    注意生物中的神經元要複雜的多,其中一個是生物中的輸出是一個脈衝,而現在大多數的數學模型神經輸出的就是一個值,當然現在也有一些脈衝人工神經網絡,可以自行了解!也就是說,只要在神經元的輸出端有一個合適的損失函數,就能讓單個神經元變成一個線性分類器。因此說,那些線性的分類器本身就是一個單層神經網絡。
  • 生成式對抗網絡GAN的高級議題
    在生成對抗網絡(GAN)中,我們有兩個神經網絡在零和遊戲中相互對抗,其中第一個網絡,即生成器,其任務是欺騙第二個網絡,即鑑別器。生成器創建"假的"數據,在這種情況下,是大熊貓的圖像,試圖欺騙鑑別器將圖像分類為真正的熊貓。我們可以逐步迭代地改進這兩個網絡,以便生成逼真的圖像以及執行其他應用程式。
  • 40納秒完成圖像分類,圖像傳感器自帶神經網絡登上Nature
    實際上,這就將光電傳感器網絡變成了神經網絡,將光學傳感和神經形態計算結合起來,使其能夠執行簡單的計算任務。改變二極體的靈敏度,就相當於改變神經網絡中的權重。把權重放在傳感器上與其他神經不同的是,這套系統的權重不是存在計算機的內存和硬碟裡,而是直接集成在圖像傳感器上。實驗中使用的有硒化鎢光電二極體製成的特殊門電路。它的特殊就在於可以調製,相當於神經網絡的訓練。
  • ICCV 2019 論文解讀:用圖神經網絡改善視頻的多標籤分類
    最新的Youtube-8M數據集包括兩部分,第一部分為video-level(視頻層級)的標註,該部分總計包含610萬個已標註的視頻,3862個分類,平均每個視頻標註了3個標籤;第二部分為segment-level(視頻片段標註),該部分挑選了1000個分類,對視頻中隨機抽取的5秒片段進行標註,該部分總共有23.7萬個標註數據;值得注意的是,segment-level的數據標註僅標註了抽取的
  • 現在單個神經網絡模型就夠了!
    那麼,你是如何完成這些任務的呢?你的大腦中是否有專門負責處理這些任務的神經網絡?現代神經科學對此給出了答案:大腦中的信息是跨不同的部位進行分享和交流的。大腦究竟怎樣完成這些任務只是研究的一個領域,而對於這種執行多任務的能力是怎樣產生的,我們也有一些線索——答案可能就存在於如何在神經網絡中存儲和解釋數據。