Я пытаюсь кодировать и изучать различные модели нейронных сетей. У меня много сложностей с входной размерностью. Я ищу учебник, который показывает различия в слоях и как установить входные и выходные данные для каждого слоя.
учебник и примеры слоев keras
Ответы (1)
документация Keras показывает все input_shape
, ожидаемые для каждого слоя.
В Keras вы увидите формы ввода в следующих формах:
input_shape
определяется пользователем в слоях- формы, показанные в резюме и др.
- фигуры массива
- тензорные фигуры
Введите форму, определенную пользователем, и формы, переданные в Reshape
слоя:
Определенная входная форма будет игнорировать размер пакета, для этого потребуется только размер отдельной выборки данных.
Например, когда вы определяете слой Dense
, вы указываете его input_shape
как (10,)
, что означает, что он ожидает десяти числовых значений в качестве входных данных.
Фигуры, показанные keras в целом:
Они будут иметь None
в качестве первого измерения. Это символизирует размер пакета, который вы используете для обучения. Пакет — это массив с большим количеством выборок данных. Поскольку размер пакета является бесплатным и определяется только тогда, когда вы фактически передаете пакет для обучения, Keras показывает его как None
.
В этом плотном слое Керас будет отображать (None, 10)
в качестве входной формы.
Фигуры массива:
Во время обучения, прогнозирования и т. д., когда у вас действительно есть партия и, следовательно, ее размер, keras покажет в сообщениях об ошибках фактическую форму партии, которая будет (размер партии,... другие размеры...).
Для нашего Dense(10)
предположим, что вы передали пакет с 300 образцами для обучения, тогда keras покажет сообщения об ошибках, содержащие форму (300,10)
Тензорные фигуры:
Формы тензора появятся в более продвинутом использовании, когда вы создаете Lambda
слоев или пользовательских слоев, а также при создании пользовательских функций потерь.
Формы тензора будут следовать идее использования размера пакета в качестве первого измерения. Итак, помните, что всякий раз, когда вы работаете непосредственно с тензорами, они будут иметь форму (BatchSize, ...other dimensions...)
.
Некоторые из наиболее распространенных слоев и их формы ввода:
Теперь, когда вы знаете эти различия, я буду продолжать использовать форму с None
ниже. Не забудьте игнорировать часть None при определении input_shape
.
Плотный
Плотный слой обычно принимает на вход одиночные значения, а не массивы, поэтому его входная форма: (None, AnyNumberOfInputValues)
Вывод будет аналогичным: (None, NumberOfNeuronsInThisLayer)
Conv1D
Сверточный слой только с одним измерением. При использовании сверток идея состоит в том, чтобы иметь каналы.
Представьте звуковой файл, он содержит два канала, левый и правый. Каждый канал представляет собой массив значений, соответствующих форме волны.
Keras предлагает вам возможность иметь channels_first
или channels_last
, это меняет ввод и вывод слоев:
- Сначала каналы:
(None, channels, length)
- С последними каналами:
(None, length, channels)
Вывод также соответствует настройкеchannels_first/channels_last и выглядит следующим образом: (None, NumberOfFilters, ResultingLength)
— с каналами первыми
Значение по умолчанию — channels_last, и вы можете определить его в каждом слое или в файле keras.json.
Conv2D:
Та же идея, что и в Conv1D, с использованием каналов, либо с каналами сначала, либо с каналами в конце. Но теперь он имеет два измерения, как изображения, каждый канал по сравнению с цветами Красный, Зеленый, Синий.
- Сначала с каналами:
(None, channels, pixelsX, pixelsY)
- С последними каналами:
(None, pixelsX, pixelsY, channels)
Вывод, следующий за параметром channels_firts/channels_last, выглядит как (None, NumberOfFilters, resultPixelsX, resultPixelsY)
для channels_first.
Повторяющиеся слои:
Слои Lstm трудно понять. У них есть несколько вариантов, которые используют разные формы ввода, и есть несколько интересных руководств по этому поводу, таких как этот и это тоже .
Обычно входные формы (None, TimeSteps, InputDimension)
Поскольку LSTM предназначен для последовательностей, вы можете разделить последовательности по временным шагам. Входное измерение — это просто возможность иметь многомерные значения.
Результат также зависит от выбранных опций. Это может быть (None, Timesteps, NumberOfCellsInTheLeyr)
или просто (None, NumberOfCells)
, в зависимости от того, хотите ли вы возвращать последовательности или нет.