2017-06-02 13 views
2

TensorFlowモデルの定義については疑問があります。 私は、損失関数を計算するために、異なる入力の出力レベルの値にアクセスする必要がある、ちょっと独特のニューラルネットワークモデルを実装しています...Tensorflow、共有変数定義の配置

したがって、私は、このような関数:

def g(input_x,....): 
###...Convolutional and Fully Connected Layers...### 
# Last FC Layer 
with tf.name_scope("output"): 
    W = tf.Variable(tf.truncated_normal([num_hidden_units, num_classes], stddev=0.05), name="W") 
    b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b") 
    scores = tf.nn.xw_plus_b(fc_2_output, W, b, name="output") 
return scores 

そして、私のモデルでは、私はこのような何かしている:

with tf.Graph().as_default(): 
    session_conf = tf.ConfigProto(
     allow_soft_placement=FLAGS.allow_soft_placement, 
     log_device_placement=FLAGS.log_device_placement) 
    sess = tf.Session(config=session_conf) 
    with sess.as_default(): 
     ###definition of other variables, constants and placeholders### 

     ###weird loss function with scores from different inputs### 
     loss_function = tf.reduce_mean(alpha1 * weights_ll * tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=labels1) \ 
         + cu1 * tf.nn.softmax_cross_entropy_with_logits(logits=g(input2), labels=g(input1) \ 
         + cv1 * tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=labels2))) \ 
         + ... + ... 
     optimizer = tf.train.AdamOptimizer(1e-3).minimize(loss_function, global_step=global_step) 
      ##...training steps and such...## 

訓練を努めていますが、あまりにも長い間、それを実行せずに、私は奇妙な結果を取得しています、と私は疑問に思いますで定義された重みg関数は訓練されているか、オプティマイザの範囲外にあります。

残念ながら、私はまだテンソルフローについて多くのことを学んでおり、現在あなたにTensorBoardの結果は表示されていません。

出力のためにPython関数を使用して、このようなモデルを定義することが合法であれば、少し経験がある人から知る必要があります。

はここまで

+1

こんにちは、Pythonの関数としての良い定義するためのモデル:

幸いにも、変数の共有アドレスTensorFlowのウェブサイトでのチュートリアルがあります。そこには問題はありません。何か問題があれば、それは損失機能のためかもしれません。どのような奇妙な結果が得られているかを示してください。損失は​​減少していますか? – hars

+0

損失は-1e + 15のオーダーの大きな負の値に還元されていますが、精度は向上していません。バイナリ分類の問題で平均0.5(ランダムな推測)です –

+1

単純な損失関数)?その場合、精度は変わりますか? – hars

答えて

0

私が言ったように、損失関数では、私はさまざまな入力に対してスコア(ネットワークの出力値)を使用し、クロスエントロピー関数を使用してそれらを比較します。

tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None) 

この関数は、logitsのソフトマックスをcomputsが、当然それはラベルのためにそれらを計算しないので、適切に異なる入力のスコアを比較するために、私はTFと「ラベル」をラップする必要があります.nn.softmax()関数は、次のように:私はこのような何かをする必要がある理由(最後の項に注意してください)場合

loss_function = tf.reduce_sum(alpha1 * weights_ll tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=tf.nn.softmax(g(input)) 

あなたは好奇心旺盛で、あなたは深い学習に興味がある、私はあなたがに招待しますニューラルグラフマシンに関するこの興味深い論文を読む:https://arxiv.org/abs/1703.04818

また、このモデルには変数を共有しないという別の大きな問題があります。実際にはこの損失関数を使用すると、loss_functionの各項に対して複数のネットワークをトレーニングするようなものになります。 https://www.tensorflow.org/programmers_guide/variable_scope

0

を読んでいただき、誠にありがとうございますあなたは

私たちは本当にモデルが実現可能であるか無しかを決めることができないこと以外は
sess.run(tf.global_variables_initializer()) 

で変数を初期化していないようですモデルとコードを理解する。

+0

もちろん変数が初期化されていますが、まったく訓練できませんでした。コード全体はhttps://github.com/gssci/neural-graph-network-sentiment-analysis/blob/training/neural_graph_machine.py でオンラインですが、重要な部分はすべて実際にそこにあります:) –