преобразование массива размера (n, n, m) в (None, n, n, m) - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь изменить размер массива (14,14,3) в (Нет, 14,14,3). Я видел, что выходные данные каждого слоя в сверточной нейронной сети имеют форму в формате (None, n, n, m).

Учтите, что имя моего массива arr

Я пытался arr[None,:,:], но он конвертирует его в размерность (1,14,14,3).

Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

https://www.tensorflow.org/api_docs/python/tf/TensorShape

TensorShape представляет, возможно, частичную спецификацию формы для Tensor. Это может быть одно из следующих:

Частично известная форма: имеет известное количество измерений и неизвестный размер для одного или нескольких измерений. например TensorShape ([Нет, 256])

Это невозможно в numpy. Все размеры ndarray известны.

Запись

arr[None,:,:] добавляет новое измерение размера 1, (1,14,14,3). Согласно правилам широковещания, такое измерение может быть изменено, чтобы соответствовать измерению другого массива. В этом смысле мы часто рассматриваем None как гибкое измерение.


Я не работал с tensorflow, хотя я вижу много вопросов с обоими тегами. tensorflow должен иметь механизмы для передачи значений в и из тензоров. Он знает о numpy, но numpy ничего не знает о tensorflow.

A ndarray - это объект с известными значениями, и его форма используется для доступа к этим значениям многомерным способом. В отличие от tensor не имеет значений:

https://www.tensorflow.org/api_docs/python/tf/Tensor

Он не содержит значений вывода этой операции, но вместо этого предоставляет средства для вычисления этих значений

Похоже, вы можете создать TensorProt из массива (и также вернуть массив из него):

https://www.tensorflow.org/api_docs/python/tf/make_tensor_proto

и сделать Тензор из массива:

https://www.tensorflow.org/api_docs/python/tf/convert_to_tensor

1 голос
/ 02 апреля 2019

Форма (None, 14,14,3) представляет, (batch_size, imgH, imgW, imgChannel), теперь imgH и imgW можно использовать взаимозаменяемо, зависит от сети и проблемы. Но размер пакета задается как «Нет» в нейронной сети, потому что мы не хотим ограничивать наш размер пакета определенным значением, так как размер нашего пакета зависит от многих факторов, таких как объем памяти, доступный для нашей модели, и т. Д.

Допустим, у вас есть 4 изображения размером 14x14x3, затем вы можете добавить каждое изображение в массив, скажем, L1, и теперь L1 будет иметь форму 4x14x14x3, то есть вы сделали пакет из 4 изображений, и теперь вы можете передать его на свой нейронная сеть.

ПРИМЕЧАНИЕ здесь Ни один не будет заменен на 4, и для всего процесса обучения это будет 4. Аналогично, когда вы подаете в свою сеть только одно изображение, он принимает размер пакета 1 и устанавливает Нет равным 1, давая вам форму (1X14X14X3)

...