2016-04-24 91 views
-1

我想在Python中为MNIST数字识别实现一个隐藏层神经网络。神经网络设置

类似如下:

   h1    
x1       z1 
       h2 
x2       z2 
1    h3 

       1 

我使用大小的隐藏层200

的功能,为的位数是784

类的数量为10

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

输入和隐含层之间,我将使用200 785矩阵V.

矩阵V:在I,J - 条目表示在输入层连接的第j个单元的重量隐藏层中的第i个单元。 V的第i行表示输入第i个隐藏单元的权重集合。

所述隐藏输出层之间,我打算应用矩阵W,其是由10 201

矩阵W:在I,J - 条目代表连接的第j个单元中的权重隐藏层到输出层中的第i个单元。 W的第i行是输入第i个输出单元的权重集合。

所以我从输入矩阵开始,这是n 784.有人可以解释做什么?我需要把它乘以什么,然后把结果乘以什么/怎么样?我不确定如何将这些矩阵相乘。

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

我有点通过矩阵的尺寸和不知道迷惑何时/何/究竟如何使用V和W

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; 

问题基本上是你,包括你的初始矩阵偏置:

+0

[This](http://neuralnetworksanddeeplearning.com/)是一个不错的和全面的介绍神经网络,并在他们的方式实现神经网络分类MNIST数据集在Python中。 – sietschie

+1

我会为你解决这个问题,但是你需要阅读更多关于神经网络的知识来了解它是如何工作的(不要忘记,编程是90%的学习/计划和10%的编码)。因此,输入维度是n x 785,隐藏的昏暗是n x 200.权重(w)定义为:w = transpose(input_dims)* hidden_​​dims。您应该使用转置来使您的数据适合矩阵乘法:w = 785 x n * n x 200.这会给您一个尺寸为785x200的w,这是所需的输出。 (*表示矩阵乘法)。 – TasosGlrs

回答

0

这里是前馈神经网络的基本仿真步骤(从我的CPP神经网络here移植)。你应该做的是之后处理它们。

看看这个paper关于前馈神经元网络。它包括您需要设置基本配方的所有配方。