Tensorflow LSTM RNN 输出激活函数

5
我有一张灰度值范围在25000到35000之间的输入图像。我正在进行二元像素分类,因此输出的标签是一个只包含0或1的矩阵。
有人知道默认的输出激活函数是什么吗?我的问题是,它是ReLu吗?我希望它是一个SoftMax函数。如果是这样,每个预测值将介于0和1之间(显然接近我的标签数据)。
我正在使用来自此处的示例代码,并对其进行了调整以适应我的数据。
我有一个正在训练的工作网络,但小批量损失目前约为425,准确度为0.0,而LSTM MNIST示例代码(链接)中的小批量损失约为0.1,准确度约为1.0。我希望如果我可以将激活函数更改为使用SoftMax函数,我可以改善结果。

据我所知,没有默认值。您必须指定激活函数。您提供的示例仅返回matmul的结果,类似于线性激活。 - drxzcl
@drxzcl 有没有办法让我将matmul的输出通过softmax传递? - Kendall Weihe
我把它作为答案添加了。 - drxzcl
1个回答

7

查看代码BasicLSTMCell的默认激活函数是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)

我的问题是,这个方法是每个LSTM单元的激活函数吗?还是输出层的激活函数?根据我所做的研究,tanh() 对于LSTM单元效果最好,因此我正在寻找一个适用于输出层(即最终层)的激活函数。 - Kendall Weihe
同时,module object has no attribute softmax - Kendall Weihe
使用同一种方法实现ReLU函数。 - Kendall Weihe
我修正了错别字 - 感谢您指出。是的,这里的激活函数是针对单个单元的。输出层在RNN/LSTM代码之外指定,并且实际上它使用一个明确创建的softmax作为交叉熵损失函数的一部分。 - mrry
哇,你说得对。感谢纠正。我已经删除了我的回答。 - drxzcl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接