【问题标题】:Neural network with 2D array input and 1D array output具有二维数组输入和一维数组输出的神经网络
【发布时间】:2019-11-26 13:25:18
【问题描述】:

我在编写简单的神经网络时遇到了一些问题。我正在通过“11 行神经网络”指南 (https://www.kdnuggets.com/2015/10/neural-network-python-tutorial.html) 学习 Python 中的神经网络。有二维数组作为输入(第一维是示例编号,第二维是示例) 作为输出,有一个一维数组。所以现在我尝试做类似的事情。我有用于学习的输入数组,包含 1000 个示例,每个示例有 64 个神经元:

n0 = np.zeros((1000, 64)) 

之后,我用数据集中的数据填充数组。我的体重是这样的:

w0 = 2 * np.random.random((64, 120))-1
w1 = 2 * np.random.random((120, 240))-1
w2 = 2 * np.random.random((240, 240))-1
w3 = 2 * np.random.random((240, 240))-1
w4 = 2 * np.random.random((240, 120))-1
w5 = 2 * np.random.random((120, 44))-1

前向功能是:

n1 = sigmoid(np.dot(n0, w0))
n2 = sigmoid(np.dot(n1, w1))
#...
n6 = sigmoid(np.dot(n5, w5))

之后 n6 大小为 1000x44。我怎样才能得到一维数组,而不是二维数组?同样在权重校正之后,神经元可以得到像 6.72853722e-172 这样的奇怪数字......而在 n6 中,答案是 1.00000000e+000 和 0.00000000e-000,在 sigmoid 函数之后怎么可能呢?

【问题讨论】:

  • 您可以使用np.flatten() 转换为一维数组或在末尾添加另一个具有较少节点的层。

标签: python numpy machine-learning neural-network


【解决方案1】:

之后 n6 大小为 1000x44。我怎样才能得到一维数组,而不是二维数组?

您获得维度为1000x44 的输出数组的原因是因为n6 有44 个输出节点,而您的输入数据有1000 个示例(意味着您同时针对所有示例训练网络)。

换句话说,您的输出层正在为数据集中的每个示例生成一个“激活”1x44(或只是44)。


同样在权重校正之后,神经元可以得到奇怪的数字,比如 6.72853722e-172... 而在 n6 个中,答案是 1.00000000e+000 和 0.00000000e-000,这在 sigmoid 函数之后怎么可能呢?

Sigmoid 产生介于01 之间的值。所以:6.72853722e-172(或,6.72 * 10-172)、1.00000000e+0000.00000000e-000 都在01之间,所以也很正常

【讨论】:

  • 感谢您的回复!我将尝试一一举例。但是,为什么它在 11 行神经网络示例中运行良好?输出是一维数组。我现在发现,我现在拥有的网络总是会产生相同的答案 - 18(我正在制作一个天气预报网络)。如果我一个一个地给网络举个例子,也许这会消失
  • 神经网络的输出并不必须是一维数组;您可以根据需要向网络提供尽可能多(或尽可能少)的示例。重要的是,每个训练批次中的示例数量将影响网络的学习方式:en.wikipedia.org/wiki/Stochastic_gradient_descent
  • 但是结果数组的哪个元素应该用作答案?我有 1000x44 数组,那么,1000 个结果中的哪一个是正确的?
  • 它们都将被用作答案。如果您尝试预测 1000 个示例,则输出数组的每一行对应于 1 个预测。
猜你喜欢
  • 1970-01-01
  • 2017-10-06
  • 2019-11-08
  • 2020-11-06
  • 2022-01-18
  • 2021-07-15
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
相关资源
最近更新 更多