2017-09-11 2 views
0

Werden gemeinsam genutzte Layer effizient in CNTK behandelt? (Das heißt, die Aktivierung Berechnung wird nicht dupliziert)Werden gemeinsam genutzte Layer effizient gehandhabt?

Fro Beispiel nehme ich den folgenden Ausdruck:

def create_func(shared_layers, out1_layers, out2_layers): 

    # ... there would be a with block specifying activations...omitted for brevity 
    shared_hl_func = For(shared_layers, lambda n: Dense(n), name="Shared Hidden Layers") 
    out1_hl_func = For(out1_layers, lambda n: Dense(n), name="Out1 Only Hidden Layers") 
    out2_hl_func = For(out2_layers, lambda n: Dense(n), name="Sigma Only Hidden Layers") 

    output1_func = Sequential([shared_hl_func, out1_hl_func, 
            Dense(1, activation=None, init=init, name="Out1_Regression_Layer")], name="Out1") 
    output2_func = Sequential([shared_hl_func, out2_hl_func, 
           Dense(1, activation=None, init=init, name="Out2_Regression_Layer")], name="Out2") 
    return output1_func, output2_func 

output1, output2 = create_func([50,25], [25, 10], [25, 10]) 
my_input = cntk.input_variable((70,)) 
dual_model = cntk.combine(output1(my_input), output2(my_input)) 

Wenn dual_model Auswertung wird die Berechnung effizient durchgeführt werden? (Werden die ersten beiden weiteren dichten Schichten nur einmal berechnet und dann geteilt? Wenn dies nicht der Fall ist, wird sie dann durch explizite Funktionskompositionshilfe mit Effizienz erstellt?

Antwort

1

In Ihrem obigen Code wird shared_hl_func unabhängig ausgewertet .. in output1_func und output2_func, obwohl Parameter geteilt wird die Berechnung grafische Darstellung zu überprüfen, bitte plot verwenden, um es zu visualisieren

Berechnung Sharing um das zu erreichen, müssen Sie die shared_hl_func Ausgangsgröße in output1_func und output2 weitergeben müssen:

import cntk 
from cntk.layers import * 
def create_func(shared_layers, out1_layers, out2_layers): 
    shared_hl_func = For(shared_layers, lambda n: Dense(n), name="Shared Hidden Layers") 
    out1_hl_func = For(out1_layers, lambda n: Dense(n), name="Out1 Only Hidden Layers") 
    out2_hl_func = For(out2_layers, lambda n: Dense(n), name="Sigma Only Hidden Layers") 
    out1_regr_func = Dense(1, activation=None, name="Out1_Regression_Layer") 
    out2_regr_func = Dense(1, activation=None, name="Out2_Regression_Layer") 
    @cntk.Function 
    def _func(x): 
     # ... there would be a with block specifying activations...omitted for brevity 
     shared_hl = shared_hl_func(x) 
     output1 = Sequential([out1_hl_func, out1_regr_func], name="Out1")(shared_hl) 
     output2 = Sequential([out2_hl_func, out2_regr_func], name="Out2")(shared_hl) 
     return cntk.combine(output1, output2) 
    return _func 

output = create_func([50,25], [25, 10], [25, 10]) 
my_input = cntk.input_variable((70,)) 
dual_model = output(my_input) 
# use plot to visualize the model 
cntk.logging.graph.plot(dual_model, 'dual.pdf') 
+0

Danke, ich vermutete das, weil mein Comp Die Verwendungsdauer nahm während des Rückschlusses nicht ab, obwohl ich mehr Schichten teilte. Ich habe GraphViz nicht auf meinem System verfügbar. Ist die von einem TensorBoardProgressWriter erstellte Visualisierung auch genau für diesen Zweck? – tarlinian

+0

Ja, Sie können das Modell auch im Tensor-Board visualisieren. – KeD

Verwandte Themen