2017-09-11 8 views
0

共有層はCNTKで効率的に処理されますか? dual_modelを評価する際共有レイヤは効率的に処理されますか?

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)) 

計算を効率的に行われる。

あちこち例では、私は、次の式があると(即ち、活性化計算は重複しませんか)? (すなわち、最初の2つのより広い稠密なレイヤーは一度だけ計算され、共有されるでしょうか?そうでない場合は、明示的な関数構成の効率化によって効率を向上させるでしょうか?

答えて

1

上記のコードでは、shared_hl_funcは独立して評価されます。。

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') 
:output1_funcとoutput2_funcで、パラメータが共有されているものの、計算グラフを確認するには、それを視覚化する plotを使用してください

は、計算の共有を実現するには、output1_funcとOUTPUT2にshared_hl_func出力変数を渡す必要があります

+0

ありがとう、私はこれは私のcomp私がより多くの層を共有したとしても、推論の間にutation時間は減少しませんでした。私は自分のシステムでGraphVizを利用できません。この目的のためにTensorBoardProgressWriterによって作成されたビジュアライゼーションも正確ですか? – tarlinian

+0

はい、モデルをテンソルボードでも視覚化できます。 – KeD

関連する問題