【问题标题】:Neural Net Setup神经网络设置
【发布时间】:2016-04-24 07:04:20
【问题描述】:

我正在尝试在 Python 中实现用于 MNIST 数字识别的单个隐藏层神经网络。

如下:

               h1             
x1                            z1
               h2
x2                            z2
 1             h3

                1

我正在使用大小为 200 的隐藏层。

数字的特征数是 784。

班级数量为10个。

每个标签都被转换为一个长度为 10 的向量,该向量在真实类的位置有一个 1,在其他位置有一个 0。

在输入层和隐藏层之间,我将使用 200 x 785 矩阵 V。

矩阵V:第i,j-项表示连接输入层中第j个单元到隐藏层中第i个单元的权重。 V 的第 i 行表示输入第 i 个隐藏单元的权重集合。

在隐藏层和输出层之间,我将应用一个矩阵 W,它是 10 x 201。

矩阵 W:第 i, j - 项表示连接隐藏层中第 j 个单元和输出层中第 i 个单元的权重。 W 的第 i 行是输入第 i 个输出单元的权重的集合。

所以我从输入矩阵开始,即 n 乘以 784。有人能解释一下该怎么做吗?我需要将它乘以什么,然后将结果乘以什么/如何?我不确定如何将这些矩阵相乘。

(我们只调用激活函数 f()。)

我对矩阵的维度有点困惑,不确定何时/何地/如何准确使用 V 和 W。

【问题讨论】:

  • This 是对神经网络以及他们实现神经网络以在 python 中对 MNIST 数据集进行分类的方式的一个很好而全面的介绍。
  • 我会为你分解这一点,但你需要阅读更多关于 NN 的内容以了解它是如何工作的(不要忘记,编程是 90% 的学习/计划和 10% 的编码)。因此,输入维度为 n x 785,隐藏维度为 n x 200。权重 (w) 定义为:w=transpose(input_dims) * hidden_​​dims。您应该使用转置使您的数据适合矩阵乘法:w=785 x n * n x 200。这将为您提供大小为 785x200 的 w,这是所需的输出。 (这里的 * 表示矩阵乘法)。

标签: python machine-learning neural-network


【解决方案1】:

这是一个前馈神经元网络的基本模拟步骤(移植自我的 cpp 神经元网络here):

def simulate(inputs):
    currentActivatedValues = inputs
    for i in range(len(self.weights)):
        summedValues = _weights[i] * currentActivatedValues + _biases[i]
        # Perform activation function with the summed values
        for k in range(len(summedValues)):
            summedValues[k] = tanh( summedValues[k] );
        currentActivatedValues = summedValues
    return currentActivatedValues;

问题基本上是您在初始矩阵中包含了偏差。您应该做的是事后处理它们。

看看这个paper 关于前馈神经网络。它包括设置基本公式所需的所有公式。

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 2011-01-02
    • 2011-06-10
    • 2016-12-23
    • 2012-09-22
    • 2016-10-24
    • 2018-08-29
    • 2015-02-10
    • 2020-10-19
    相关资源
    最近更新 更多