我正在用一些数据训练 DNN 模型,并希望分析学习到的权重以了解我正在研究的真实系统(生物学中的信号级联)。我想有人可以说我正在使用人工神经网络来了解生物神经网络。
对于我的每个训练示例,我删除了一个基因,该基因负责在顶层发出信号。
当我将此信号级联建模为 NN 并删除第一个隐藏层中的一个节点时,我意识到我正在做一个真实版本的 dropout。
因此,我想使用 dropout 来训练我的模型,但是我在网上看到的 dropout 的实现似乎随机丢弃了一个节点。我需要一种方法来为每个训练示例指定要退出的节点。
关于如何实现这一点的任何建议?我对任何软件包都持开放态度,但现在我已经完成的一切都在 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)