python - 如何在Tensorflow中获得LSTM的密集层输出?

标签 python tensorflow deep-learning lstm

我正在使用 Tensorflow 对具有单个密集层的 LSTM 进行建模。我想要完成的是从 LSTM 获取密集层输出/隐藏表示。我已经检查过 Keras 中是否有类似的方法,但是在 Tensorflow 中如何实现呢?我在下面附加了针对该问题的代码(引用 LSTM on sequential data, predicting a discrete column ):-

# clear graph (if any) before running
tf.reset_default_graph()

X = tf.placeholder(tf.float32, [None, time_steps, inputs], name = "Inputs")
y = tf.placeholder(tf.float32, [None, outputs], name = "Outputs")

# LSTM Cell
cell = tf.contrib.rnn.BasicLSTMCell(num_units=neurons, activation=tf.nn.relu)
cell_outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)

# pass into Dense layer
stacked_outputs = tf.reshape(cell_outputs, [-1, neurons])
out = tf.layers.dense(inputs=stacked_outputs, units=outputs)

# squared error loss or cost function for linear regression
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
    labels=y, logits=out))

# optimizer to minimize cost
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(loss)


with tf.Session() as sess:
    # initialize all variables
    tf.global_variables_initializer().run()
    tf.local_variables_initializer().run()

    # Train the model
    for steps in range(epochs):
        mini_batch = zip(range(0, length, batch_size),
                         range(batch_size, length + 1, batch_size))

        # train data in mini-batches
        for (start, end) in mini_batch:
            sess.run(training_op, feed_dict={X: X_train[start:end, :, :],
                                             y: y_train[start:end, :]})

        # print training performance
        if (steps + 1) % display == 0:
            # evaluate loss function on training set
            loss_fn = loss.eval(feed_dict={X: X_train, y: y_train})
            print('Step: {}  \tTraining loss: {}'.format((steps + 1), loss_fn))

我附加的代码是特定于训练集的,但我相信该过程应该与为测试集输入字典非常相似。是否有任何一个线性/短代码段可以返回密集层输出(输入数据的隐藏表示)。非常感谢在这方面的任何帮助。

最佳答案

当您位于Session上下文管理器中时,这是最短的方法: out_vals = out.eval({X: X_train})

相当于: out_vals = sess.run(out, feed_dict={X: X_train})

您不需要为前向传播提供标签(如果您只是评估密集层)。

关于python - 如何在Tensorflow中获得LSTM的密集层输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55108063/

相关文章:

python - 旧版本 Cherrypy 的文档

python - 张量来自不同的图

python - Tensorflow 2.0 中 tf.contrib.framework.nest.flatten_dict_items() 的等效项是什么?

python - 多输入预训练模型

python - 如何使用Python中的类在文本文件中进行模式搜索

python - 喘息模板字典变量查找

deep-learning - 空洞卷积有什么用?

python - 将 keras 优化器作为字符串参数传递给 keras 优化器函数

python - fcntl.flock - 如何实现超时?

machine-learning - Tensorflow 计算图像中的对象数