Ich trainiere ein DNN-Modell auf einige Daten und hoffe, die gelernten Gewichte zu analysieren, um etwas über das wahre System zu lernen, das ich studiere (Signalkaskaden in der Biologie). Ich denke, man könnte sagen, ich benutze künstliche NNs, um über biologische NNs zu lernen.Benutzerdefinierte Dropout in Tensorflow
Für jedes meiner Trainingsbeispiele habe ich ein einzelnes Gen entfernt, das für die Signalisierung auf der obersten Schicht verantwortlich ist.
Während ich diese Signalkaskade als NN modelliere und einen der Knoten in der ersten versteckten Schicht entferne, merke ich, dass ich eine echte Version des Dropouts mache.
Ich möchte daher Dropout verwenden, um mein Modell zu trainieren, aber die Implementierungen von Dropout, die ich online gesehen habe scheinen zufällig einen Knoten auszusetzen. Was ich brauche, ist eine Möglichkeit zu spezifizieren, welcher Knoten für jedes Trainingsbeispiel ausfällt.
Haben Sie Ratschläge zur Implementierung? Ich bin offen für jedes Paket, aber im Moment ist alles, was ich bereits getan habe, in Tensorflow, also würde ich eine Lösung schätzen, die dieses Framework verwendet.
Für diejenigen, die die Details bevorzugen erläutert:
Ich habe 10-Eingangsvariablen, die zu 32 relu Knoten in der ersten Schicht vollständig verbunden sind, die vollständig mit einer zweiten Schicht verbunden sind (relu), die voll ist, verbunden mit dem Ausgang (linear, weil ich Regression mache).
Zusätzlich zu den 10 Eingangsvariablen weiß ich auch zufällig, welcher der 28 Knoten ausfallen sollte.
Gibt es eine Möglichkeit, die ich beim Training angeben kann? Hier
ist der Code, den ich zur Zeit verwenden:
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)
„Wenn Sie einen versteckten Knoten fallen müssen (in Schicht 2), es ist nur ein Vektor von 1 s und eine 0“ - Genau das möchte ich machen. Soll ich also einen zweiten Eingangstensor erzeugen, der nach der zweiten Schicht multipliziert? – kmace
Ja, also hätten Sie zwei Platzhalter. ph_inputDropout und ph_layer2Dropout. also ist die Ausgabe von layer2 etwas wie Eingabe * Gewichte + Bias. Multiplizieren Sie das einfach mit den ph_layer2Dropout 1's und 0's. –
oh, du hast Code gepostet. Ich werde sehen, ob ich es bearbeiten kann ... –