为什么全局Step不会在自定义Tensorflow模型函数中递增

时间:2017-01-06 08:46:53

标签: python tensorflow lstm

我一直在尝试将this tutorial更新为tensorflow的最新版本,即0.12,我在自定义模型函数定义中遇到了障碍,以训练lstm模型。

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
          )

1 个答案:

答案 0 :(得分: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'
)

在这里,我首先创建了神经网络层,然后尝试在该层上找到优化 - 这似乎导致了我的问题。 tensorflow文档帮助了我很多 - 因此我能够在tensorflow上运行代码 - v0.12。