2016-04-24 3 views
-1

Я пытаюсь реализовать одну скрытую сетевую сеть для распознавания цифр MNIST в Python.Neural Net Setup

Как следующее:

   h1    
x1       z1 
       h2 
x2       z2 
1    h3 

       1 

Я использую скрытый слой размером 200

Количество функций для цифр 784.

Количество классов 10 .

Каждая метка преобразуется в вектор длиной 10, который имеет один 1 в позиции истинного класса и 0 в другом месте.

между входным и скрытым слоем, я буду использовать 200 по 785 В. Матрица

Matrix V: I, J - вход представляет собой вес, соединяющий блок его во входном слое i-й блок в скрытом слое. I-я строка V представляет собой совокупность весов, подаваемых в i-й скрытый блок.

Между скрытым в выходном слое, я собираюсь применить матрицу W, которая 10 по 201.

Матрицы W: I, J - вход представляет собой вес, соединяющий блок его в скрытый слой на i-й блок в выходном слое. I-й ряд W представляет собой совокупность весов, подаваемых в i-й выходной блок.

Итак, я начинаю с матрицы ввода, которая равна n 784. Может ли кто-нибудь объяснить, что делать? Что мне нужно, чтобы умножить его на, а затем, что/как я могу умножить результат? Я не уверен, как именно умножить эти матрицы.

(Давайте называть функции активации F().)

Я немного смущен размерами матриц и не уверен, когда/где/как именно использовать V и W.

+0

[This] (http://neuralnetworksanddeeplearning.com/) - это приятное и всестороннее введение в нейронные сети и способ внедрения нейронной сети для классификации набора данных MNIST в python. – sietschie

+1

Я сломаю это для вас, но вам нужно больше узнать о NN, чтобы понять, как это работает (не забывайте, что программирование - это 90% обучения/планирования и 10% кодирования). Таким образом, размер ввода n x 785, а скрытый dim - n x 200. Веса (w) определяются как: w = transpose (input_dims) * hidden_dims. Вы должны использовать транспонирование, чтобы привести ваши данные в нужную форму для матричного умножения: w = 785 x n * n x 200. Это даст вам размер 785x200, который является желаемым результатом. (здесь * означает умножение матрицы). – TasosGlrs

ответ

0

Вот основной шаг моделирования прямоточной нейронной сети (Портированный из моей 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 о сетях нервных сетей в прямом направлении. Он включает в себя все формулы, необходимые для настройки базовой.

Смежные вопросы