【问题标题】:using tanh as activation function in MNIST dataset in tensorflow在 tensorflow 的 MNIST 数据集中使用 tanh 作为激活函数
【发布时间】:2019-04-25 22:09:19
【问题描述】:

我正在使用 tensorflow 作为 MNIST 数据集的简单 MLP 神经网络作为我的作业。在这个问题中,我们应该实现一个以 tanh 作为激活函数的多层感知器。我应该使用带有 [-1,+1] 的数据标签。例如对于数字 3,我们有:

[-1,-1,-1,+1,-1,-1,-1,-1,-1,-1]

我知道对于 sigmoid 函数,我们可以使用 on_hot 例如:

mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

为了将数据放入 [0,1] 中,如下所示的数字 3:

[0,0,0,1,0,0,0,0,0,0]

如何在 [-1 ,+1] 之间编码标签。 在此先感谢您的帮助

【问题讨论】:

  • 请问,你为什么要这么做?
  • 因为当我们使用 tanh 时,我们应该将值放在这个范围内@JérémyBlain
  • 是的,实际上在问题中已经说过将活动类的值设置为一个,将另一个设置为-1。
  • 这是一个非常尴尬的要求。使用 0 和 1 进行 one-hot 编码的原因是,这是交叉熵损失的常见形式所期望的格式。 (另外,这与logsig或tanh无关,对于多类分类,输出层通常使用softmax。)
  • sigmoid 或 tanh 通常都不用于多类分类,所以我不明白你到底想要做什么。

标签: tensorflow neural-network deep-learning mnist activation-function


【解决方案1】:

对该问题进行不必要的反对。顺便说一句..如果我理解正确,这就是答案。

我的理解是,您必须使用 tanh 而不是使用 sigmoid,因此您希望输出数据格式为 +1s 和 -1s 而不是 0s 和 1s。

请注意,一种热编码是专门为获取 1 和 0 的输出而设计的。这就是为什么它被称为一种热编码 - 它输出正确答案为 1,其他答案为 0。

现在,没有内置函数可以获取您想要的输出。但是我更喜欢通过编写自己的代码来使用简短而简单的方法。不要害怕 - 这只是 1 行代码。

import numpy as np
a = np.array([1, 1, 1, 0, 1, 0])
a[a==0]=-1

输出是:

array([1, 1, 1, -1, 1, -1])

您可以使用相同的..使用您的代码将一个热编码标签作为输出,然后使用这一行代码得到您想要的。

a[a==0]=-1

谢谢你..

【讨论】:

    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 2020-12-05
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多