【问题标题】:Tensorflow LSTM RNN output activation functionTensorflow LSTM RNN 输出激活函数
【发布时间】:2016-10-14 06:37:22
【问题描述】:

我有一个灰度值范围为25000 - 35000 的输入图像。我正在做一个二进制像素分类,所以输出的基本事实是0's1's 的矩阵。

有谁知道默认的输出激活函数是什么?我的问题是,它是 ReLu 吗?我希望它是一个 SoftMax 函数。在这种情况下,每个预测值都在01 之间(显然接近我的真实数据)。

我正在使用来自here 的示例代码,我已对其进行了调整以适用于我的数据。

我有一个正在训练的工作网络,但现在小批量损失约为 425,准确度为 0.0,对于 LSTM MNIST 示例代码(链接),小批量损失约为 0.1,准确度约为 1.0。我希望如果我可以将激活函数更改为使用 SoftMax 函数,我可以提高结果。

【问题讨论】:

  • AFAIK 没有默认值。您必须指定激活函数。您链接的示例仅返回 matmul 的结果,类似于线性激活。
  • @drxzcl 有没有办法可以获取 matmul 的输出并将其传递给 softmax?
  • 我将其添加为答案。

标签: python machine-learning neural-network artificial-intelligence tensorflow


【解决方案1】:

the codeBasicLSTMCell的默认激活函数是tf.tanh()。您可以通过在构造 BasicLSTMCell 对象时指定可选的 activation 参数来自定义激活函数,并传递任何期望单个输入并产生相同形状的单个输出的 TensorFlow 操作。例如:

# Defaults to using `tf.tanh()`.
lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)

# Uses  `tf.relu()`.
lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0, activation=tf.nn.relu)

# Uses  `tf.softmax()`.
lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0, activation=tf.nn.softmax)

【讨论】:

  • 我对这种方法的问题是......这是每个单元格的激活函数吗?还是输出层的激活函数?根据我所做的研究,tanh() 最适合 LSTM 细胞,所以我正在寻找输出层(最后一层)的激活函数
  • 还有,module object has no attribute softmax
  • relu 函数相同
  • 我修正了错别字 - 感谢您指出。是的,这里的激活函数是针对单个细胞的。输出层在 RNN/LSTM 代码之外指定,实际上它使用explicitly created softmax 作为交叉熵成本函数的一部分。
  • 哇,你是对的。感谢您的更正。我删除了我的答案。
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2016-11-21
  • 1970-01-01
  • 2022-11-14
  • 2016-10-01
  • 2018-09-30
相关资源
最近更新 更多