我正在對一些數據進行DNN模型的培訓,並希望分析學習的權重以瞭解我正在學習的真實系統(生物學中的信號級聯)。我想可以說我正在使用人工神經網絡來了解生物神經網絡。張量流中的自定義退出
對於我的每個訓練實例,我已刪除的單個基因,即負責在頂部層的信令。
由於我建模這種信號級聯的神經網絡,併除去第一隱藏層的節點之一,我意識到,我正在做輟學的現實生活版。
因此,我要喜歡用退學來訓練我的模型,但我已經在網上看到似乎隨機掉落出一個節點輟學的實現。我需要的是一種指定爲每個訓練示例丟棄哪個節點的方法。
有關如何實現此目的的任何建議?我對任何軟件包都是開放的,但現在我已經完成的所有工作都在Tensorflow中,所以我很欣賞使用該框架的解決方案。
對於那些寧願細節解釋:
我有10個輸入變量,被完全連接到在第一層32個RELU節點,其被完全連接到第二層(RELU),這是完全連接到輸出(線性因爲我正在做迴歸)。
除了10個輸入變量,我還碰巧知道哪28個節點應該退出。
有沒有一種方法可以在培訓時指定?
這是我目前使用的代碼:
num_stresses = 10
num_kinase = 32
num_transcription_factors = 200
num_genes = 6692
# Build neural network
# Input variables (10)
# Which Node to dropout (32)
stress = tflearn.input_data(shape=[None, num_stresses])
kinase_deletion = tflearn.input_data(shape=[None, num_kinase])
# This is the layer that I want to perform selective dropout on,
# I should be able to specify which of the 32 nodes should output zero
# based on a 1X32 vector of ones and zeros.
kinase = tflearn.fully_connected(stress, num_kinase, activation='relu')
transcription_factor = tflearn.fully_connected(kinase, num_transcription_factors, activation='relu')
gene = tflearn.fully_connected(transcription_factor, num_genes, activation='linear')
adam = tflearn.Adam(learning_rate=0.00001, beta1=0.99)
regression = tflearn.regression(gene, optimizer=adam, loss='mean_square', metric='R2')
# Define model
model = tflearn.DNN(regression, tensorboard_verbose=1)
「如果你需要刪除一個隱藏節點(在第2層),這是1秒的只是一個載體和0」。 - 這正是我想要做的。那麼我應該在第二層之後創建第二個輸入張量嗎? – kmace
是的,所以你會有兩個佔位符。 ph_inputDropout和ph_layer2Dropout。所以layer2的輸出就像輸入*權重+偏差。只需乘以ph_layer2Dropout 1和0即可。 –
哦,你貼的代碼。我會看看我是否可以編輯它... –