【问题标题】:Are these functions equivalent in TensorFlow?这些函数在 TensorFlow 中是否等效?
【发布时间】:2016-02-29 22:24:22
【问题描述】:

我是 TensorFlow 的新手,最近几天一直在研究它。 我想了解以下两个功能是否等效:

1.

softmax = tf.add(tf.matmul(x, weights), biases, name=scope.name)

2.

softmax = tf.nn.softmax(tf.matmul(x, weights) + biases, name=scope.name)

如果它们实际上不同,主要区别是什么?

【问题讨论】:

    标签: python tensorflow deep-learning


    【解决方案1】:
    softmax1 = tf.add(tf.matmul(x, weights), biases, name=scope.name)
    

    不等于

    softmax2 = tf.nn.softmax(tf.matmul(x, weights) + biases, name=scope.name)
    

    因为softmax1 根本没有softmax 计算,而softmax2 有。请参阅 tf.nn.softmax 的 Tensorflow API。 general idea of a softmax 是它规范化输入,通过重新缩放整个数据序列确保它们的条目在区间 (0, 1) 中并且总和为 1。

    两个语句之间唯一相同的是基本计算。 + 做同样的事情 tf.add 做同样的事情 tf.add(tf.matmul(x, weights), biases) 等于tf.matmul(x, weights) + biases


    编辑:添加一些说明(我想你不知道真的知道softmax在做什么?):

    tf.matmul(x, W) + bias
    

    计算x(你的输入向量)和W当前层权重之间的矩阵乘法。然后添加bias

    这个计算模拟了一层的激活。此外,您还有一个激活函数,例如转换激活的 sigmoid 函数。因此,对于一层,您通常会执行以下操作:

    h1 = tf.sigmoid(tf.matmul(x, W) + bias)
    

    这里h1 将激活这一层。

    softmax 操作只是重新调整您的输入。例如,如果您在输出层获得了此激活:

    output = [[1.0, 2.0, 3.0, 5.0, 0.5, 0.2]]
    

    softmax 重新缩放此输入以拟合区间 (0, 1) 中的值并且总和等于 1:

    tf.nn.softmax(output)
    > [[ 0.01497873,  0.0407164 ,  0.11067866,  0.81781083,  0.00908506,
         0.00673038]]
    
    tf.reduce_sum(tf.nn.softmax(output))
    > 1.0
    

    【讨论】:

    • 那么,说2)是应用交叉熵来获得标签0.01.0的概率是否正确,而1)需要进一步的通道来获得1-热门标签?
    • 不,这是不正确的。 softmax 不会产生 1-hot 编码向量。 softmax 操作重新调整您的输入向量。要将交叉熵作为错误,您需要单独计算交叉熵。
    • 好的,我明白了。
    • 我已经为您添加了一个额外的解释和一个示例。
    • 我正在关注 TensorFlow 教程,但很多东西都不清楚。也许对于我的工作我不需要知道所有,但我需要创建一个好的图像识别模型来集成到我自己的软件中。但当然,我需要理解以最佳方式创建模型和卷积网络的段落。我不是机器学习开发人员,对于基本问题很抱歉:)
    猜你喜欢
    • 2020-02-01
    • 2017-06-11
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2012-11-30
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多