2016-06-06 2 views
0

Я разрабатываю модель, основанную на принципах нейронной сети. У меня есть запись слой, вес и выходной слой:Python - умножение перекрестного массива

[1,2] -- [ [1,1] , [1,1] ] --> [3,3] 

Simple Neural Network based on two layers and one weight layer

Мой вопрос, является ли Python простого способа (с NumPy) для вычисления выходных слоев, не делая петли и петли.

Текущая реализация:

for i in range(0,number_of_out_neurons): 
    out_neuron_adder_toWrap = weights[i] * all_input_layer 
    out_neuron[i] = sum(out_neuron_adder)   <-- wrapping 
+5

Не могли бы вы реализовать хитрый вариант, так что у нас будет лучшая идея о том, что именно вы имеете в виду, а также поможет нам переквалифицировать любой векторный подход, который можно было бы предложить? – Divakar

+1

Учитывая, что это просто добавление каждого «ввода», умноженного на каждый «вес», вы можете просто сделать «точечный продукт». Но это будет работать только в том случае, если размеры ввода работают с весовыми размерами. – ZWiki

+0

Не могли бы вы также добавить информацию о форме (формы входных массивов)? Было бы лучше добавить минимальный репрезентативный пример с числовыми данными и конечным результатом. – Divakar

ответ

2

Вы можете осуществить это с numpy.dot

In [1]: import numpy as np 
In [2]: a 
Out[2]: array([1, 2]) 
In [3]: b 
Out[3]: 
array([[1, 1], 
     [1, 1]]) 
In [4]: np.dot(a,b) 
Out[4]: array([3, 3]) 

Вот еще Reference о numpy.dot

+0

Я думал то же самое. Единственная проблема заключается в том, что если @hugodecasta имеет вес неравных размеров, т. Е. Имеет 3 выхода и 2 входа – ZWiki

+0

Да, он отлично работает, Thansks вам ребята – hugodecasta

+0

Для тех же форм ввода/вывода он работает, но, как и для 3/2, он не работает как и ожидалось, но я хочу, чтобы было легко исправить это. – hugodecasta

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