将 softmax 分类器分层到 RNN 自动编码器中
Posted
技术标签:
【中文标题】将 softmax 分类器分层到 RNN 自动编码器中【英文标题】:Layering softmax classifier into RNN autoencoder 【发布时间】:2021-08-11 18:26:12 【问题描述】:我正在实施的论文是使用带有自动编码器的 RNN 对异常网络数据进行分类(二进制分类)。他们首先在无监督的情况下训练模型,然后描述了这个过程:
接下来进行微调训练(有监督),训练最后一层 使用标记样本的网络。使用实现微调 监督训练准则可以进一步优化整个网络。 我们使用 softmax 回归层,顶部有两个通道 层
目前,我已经实现了自动编码器:
class AnomalyDetector(Model):
def __init__(self):
super(AnomalyDetector, self).__init__()
self.encoder = tf.keras.Sequential([
layers.Dense(64, activation="relu"),
layers.Dense(32, activation="relu"),
layers.Dense(16, activation="relu"),
layers.Dense(8, activation="relu")])
self.decoder = tf.keras.Sequential([
layers.Dense(16, activation="relu"),
layers.Dense(32, activation="relu"),
layers.Dense(64, activation="relu"),
layers.Dense(79, activation='relu')
])
如何在 TensorFlow 中实现 softmax 回归层?
我无法理解这个过程,我应该向自动编码器添加另一层吗?我应该在类中添加另一个函数吗?
【问题讨论】:
【参考方案1】:以防万一将来有人访问此- 您可以通过更改激活来创建 softmax 层。在我的例子中,我选择了 sigmoid 激活,因为 sigmoid 相当于 二元素 softmax。根据documentation。
class AnomalyDetector(Model):
def __init__(self):
super(AnomalyDetector, self).__init__()
self.pretrained = False
self.finished_training = False
self.encoder = tf.keras.Sequential([
layers.SimpleRNN(64, activation="relu", return_sequences=True),
layers.SimpleRNN(32, activation="relu", return_sequences=True),
layers.SimpleRNN(16, activation="relu", return_sequences=True),
layers.SimpleRNN(8, activation="relu", return_sequences=True)])
self.decoder = tf.keras.Sequential([
layers.SimpleRNN(16, activation="relu", return_sequences=True),
layers.SimpleRNN(32, activation="relu", return_sequences=True),
layers.SimpleRNN(64, activation="relu", return_sequences=True),
layers.SimpleRNN(79, activation="relu"), return_sequences=True])
layers.SimpleRNN(1, activation="sigmoid")
【讨论】:
感谢您用您最终发现的工作方式回答您自己的问题,希望对您有所帮助!以上是关于将 softmax 分类器分层到 RNN 自动编码器中的主要内容,如果未能解决你的问题,请参考以下文章