2017-01-06 7 views
0

this tutorialをテンソルフローの最新バージョン、つまり0.12に更新しようとしていました。カスタムモデル関数定義の不具合を突き止めてlstmモデルをトレーニングしました。カスタムTensorflowモデル関数でグローバルステップがインクリメントしないのはなぜですか

def _lstm_model(X, y): 
    stacked_lstm = tf.nn.rnn_cell.MultiRNNCell(
     lstm_cells(rnn_layers), 
     state_is_tuple=True) 

    global_step = tf.Variable(0, trainable=False) 
    X = tf.cast(X, tf.float32) 
    y = tf.cast(y, tf.float32) 
    x_ = tf.unpack(X, axis=1, num=time_steps) 
    output, layers = tf.nn.rnn(stacked_lstm, x_, dtype=dtypes.float32) 
    output = dnn_layers(output[-1], dense_layers) 
    (predictions, loss) = learn.models.linear_regression(output, y) 

    if optim == 'Adagrad': 
     print("using AdagradOptimizer") 
     optimizer = tf.train.AdagradOptimizer(learning_rate) 
    else: 
     optimizer = tf.train.GradientDescentOptimizer(learning_rate) 

    train_op = optimizer.minimize(
     loss, 
     global_step=global_step) 

    return (predictions, loss, train_op) 

私は両方の世界のステップを指定して、それを指定しないで試してみた - と私は同じ結果になってしまっている - ステップは、最適化された損失を0のままであり、私はスクリプト全体を停止するまでこれが続きます。以下のコードは、私がEstimatorを作成してモデルに適合させるために使用するコードです。

regressor = learn.SKCompat(learn.Estimator(
model_fn=lstm_model(TIMESTEPS, 
        RNN_LAYERS, 
        DENSE_LAYERS, 
        optim='Adagrad', 
        learning_rate=0.03))) 

regressor.fit(x=X['train'], 
      y=y['train'], 
      batch_size=BATCH_SIZE, 
      steps=TRAINING_STEPS 
     ) 

答えて

0

adamOptimizerは自分自身で使用するのではなく、私が作成したニューラルネットワークで使用することを認識しました。私のコードで以下の編集 - 私は私が欲しかったものを達成助け:

# create model and features 
stacked_lstm = tf.nn.rnn_cell.MultiRNNCell(
    lstm_cells(params['rnn_layers']), 
    state_is_tuple=True) 
features = tf.cast(features, tf.float32) 
targets = tf.cast(targets, tf.float32) 
features = tf.unpack(features, axis=1, num=params['time_steps']) 
output, layers = tf.nn.rnn(stacked_lstm, features, dtype=dtypes.float32) 
output = dnn_layers(output[-1], params['dense_layers']) 

# Define Loss 
(predictions, loss) = learn.models.linear_regression(output, targets) 

# train_op 
train_op = tf.contrib.layers.optimize_loss(
    loss=loss, 
    global_step=contrib.framework.get_global_step(), 
    learning_rate=params['learning_rate'], 
    optimizer='Adagrad' 
) 

ここで私は最初のニューラルネットワーク層を作成し、そのレイヤー上の最適化を見つけることを試みた - これは私の問題を引き起こしているように見えたものです。 テンソルフローのドキュメンテーションは私をかなり助けました - それで、私はテンソルフロー上でコードを実行することができました - v0.12。

関連する問題