скалярное произведение двух массивов с известными размерами не дает ожидаемых размеров - PullRequest
1 голос
/ 03 ноября 2019

Я являюсь точечным массивом из 2-х чисел, один с размерами (150, 4), другой с (4, 1). Это должно привести к массиву с измерениями (150, 1), однако я получаю массив (150, 4).

Я попытался создать список списков данных и передать егов конструктор массива.

x = iris.data #shape (150, 4)
y = np.array(y_actual) #shape (150, 1)

np.random.seed(1)

syn1 = 2 * np.random.random( (x.shape[1], x.shape[1]) ) - 1
syn2 = 2 * np.random.random( (x.shape[1], y.shape[1]) ) - 1

for i in range(10000):
    layer0 = x
    layer1 = sigmoid( np.dot(layer0, syn1) )
    layer2 = sigmoid( np.dot(layer1, syn2) )

    l2_err = layer2 - y

    l2_delta = l2_err * sigmoid(layer2, deriv = True)
    l1_err = np.dot(l2_delta, syn2.T)
    l1_delta = l1_err * sigmoid(layer1, deriv = True)

Я ожидаю, что размеры layer2 будут (150, 1), но я получаю измерения (150, 4).

1 Ответ

0 голосов
/ 03 ноября 2019

Я добавил размеры - насколько я могу вывести:

x = iris.data #shape (150, 4)
y = np.array(y_actual) #shape (150, 1)

np.random.seed(1)

syn1 = 2 * np.random.random( (x.shape[1], x.shape[1]) ) - 1  # (4,4)
syn2 = 2 * np.random.random( (x.shape[1], y.shape[1]) ) - 1  # (4,1)

for i in range(10000):
    layer0 = x
    layer1 = sigmoid( np.dot(layer0, syn1) )   # (150,4) dot (4,4)=>(150,4)
    layer2 = sigmoid( np.dot(layer1, syn2) )   # (150,4) dot (4,1)=>(150,1)

    l2_err = layer2 - y       # (150,1) (150,1) => (150,1)

    l2_delta = l2_err * sigmoid(layer2, deriv = True)
    l1_err = np.dot(l2_delta, syn2.T)     # (150,1) (1,4) => (150,4)
    l1_delta = l1_err * sigmoid(layer1, deriv = True)
...