В чем разница между двумя следующими функциями изменения формы в numpy? - PullRequest
0 голосов
/ 30 апреля 2020

Я строю нейронную сеть. где я должен выровнять свой тренировочный набор данных.

У меня есть два варианта. 1:

train_x_flatten = train_x_orig.reshape(train_x_orig.shape[0], -1).T

, а 2-е:

 train_x_flatten = train_x_orig.reshape(train_x_orig.shape[1]*train_x_orig.shape[2]*train_x_orig.shape[3], 209)

оба дали одинаковую форму, но я нашел разницу при вычислении стоимости? это почему? спасибо

1 Ответ

1 голос
/ 30 апреля 2020

Ваш исходный тензор имеет, по крайней мере, ранг 4 на основе второго примера. Первый пример вытягивает каждый элемент, упорядоченный путем увеличения крайнего правого индекса, и вставляет элементы в строки по длине нулевой формы. Затем транспонирует.

Во втором примере снова извлекаются элементы из приращения от самого правого индекса, то есть:

element = train_x_orig[0, 0, 0, 0]
new_row.append(element)
element = train_x_orig[0, 0, 0, 1]
new_row.append(element)

, но размер строки отличается. Теперь это измерение всего остального в тензоре.

Вот пример для иллюстрации.

Сначала мы создадим упорядоченный массив и изменим его форму до ранга 4.

import numpy as np

x = np.arange(36).reshape(3,2,3,2)
x
# returns:
array([[[[ 0,  1],
         [ 2,  3],
         [ 4,  5]],

        [[ 6,  7],
         [ 8,  9],
         [10, 11]]],


       [[[12, 13],
         [14, 15],
         [16, 17]],

        [[18, 19],
         [20, 21],
         [22, 23]]],


       [[[24, 25],
         [26, 27],
         [28, 29]],

        [[30, 31],
         [32, 33],
         [34, 35]]]])

Вот результат первого примера

x.reshape(x.shape[0], -1).T
# returns:
array([[ 0, 12, 24],
       [ 1, 13, 25],
       [ 2, 14, 26],
       [ 3, 15, 27],
       [ 4, 16, 28],
       [ 5, 17, 29],
       [ 6, 18, 30],
       [ 7, 19, 31],
       [ 8, 20, 32],
       [ 9, 21, 33],
       [10, 22, 34],
       [11, 23, 35]])

А вот второй пример

x.reshape(x.shape[1]*x.shape[2]*x.shape[3], -1)
# returns:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [21, 22, 23],
       [24, 25, 26],
       [27, 28, 29],
       [30, 31, 32],
       [33, 34, 35]])

Принцип переупорядочения элементов принципиально отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...