【问题标题】:How to work with an output of a neural network?如何处理神经网络的输出?
【发布时间】:2016-07-11 00:09:35
【问题描述】:

我对神经网络很陌生,我正在尝试用 python 制作一个小型网络。但由于我是新手,我不知道如何缩放和比较输出。所以这是我的问题。

我给出的输入是这样的列表

input = [0,0,1]
desired output = 4

所以我做了所有的神经网络编码,数据通过网络后,网络使用 sigmoid 函数输出一个介于 -1,+1 之间的数字。如何缩放输出以计算所需输出为 4 的误差?

这可能是一个愚蠢的问题,但我是机器学习的新手。谢谢

【问题讨论】:

  • 将验证数据重新调整为介于 -1 和 1 之间且均值为零的标准化数组不是更好吗?
  • @Alessandro 验证数据是指输入?那么这里的输入数据是一个列表,它只有0和1,比如[1,1,0]或[0,1,0]等,标准化输入会有什么好处吗?
  • 不,我的意思是输出,我假设你希望你想要的输出是 4,因为你有一些数据,你已经知道输出要与之比较。因此,重新调整您已经知道能够比较的输出可能很有用。
  • @AChampion 目前我只有 1 个输出节点,但我在想有多个输出节点就像你描述的那样,我想知道我是否可以这样做只有一个输出节点,因为多个节点可能会使事情变得复杂?

标签: python machine-learning neural-network


【解决方案1】:

在这种特定情况下,您可能需要一个线性输出节点(即不是 sigmoid)。假设这是一个回归问题(如果不是,请参见下文)。通常,如果 NN 不应该“更难”预测更高的值,则您需要一个线性输出节点。

大多数机器学习模块都允许您进行设置。

Sigmoid 输出节点主要用于分类问题(因为神经网络越来越“难”预测接近 1 的值,这是 100% 确定的类)

如果这是一个分类问题,通常神经网络在每个类都有一个输出节点时表现更好(所以对每个类使用一个 sigmoid 输出节点,它的输出值对应于 NN 认为样本属于该特定的机会类)。

【讨论】:

    【解决方案2】:

    这不是一个愚蠢的问题。您想要做的是将您想要的输出标准化为您的网络输出范围内(或反向并扩大网络输出,但规范是相反的)。

    因此,将您的数据通过类似以下的函数:

    def normalize_values(list_of_values, desired_min=-1., desired_max=1.):
        min_val = min(list_of_values)
        max_val = max(list_of_values)
        range = max_val - min_val
        scale = (desired_max-desired_min)/range
        return [((x-min_val)*scale)+desired_min for x in list_of_values)]
    

    【讨论】:

    • 能否请您把方程式写成易于理解的格式?和 I = Imin + (Imax-Imin)*(X-Dmin)/(Dmax-Dmin) 一样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2019-01-30
    • 2020-03-15
    • 2023-03-16
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多