Кортежи против чисел
input_shape
должен быть кортежем, поэтому только (20,)
может удовлетворить его. Число 20
не является кортежем. - Есть параметр input_dim
, чтобы облегчить вам жизнь, если у вас только одно измерение. Этот параметр может принимать 20
. (Но на самом деле, меня это просто сбивает с толку, я всегда работаю с input_shape
и использую кортежи, чтобы сохранить согласованное понимание).
Dense(32, input_shape=(784,))
совпадает с Dense(32, input_dim=784)
.
Изображения
В изображениях есть не только пиксели, но и каналы (красный, зеленый, синий).
Черно-белое изображение имеет только один канал.
So, (28pixels, 28pixels, 1channel)
Но обратите внимание, что нет никакого обязательства следовать этой форме для изображений повсюду. Вы можете придать им любую форму. Но некоторые виды слоев требуют определенной формы, иначе они не могут работать.
Некоторые слои требуют определенной формы
Это случай сверточных 2D-слоев, которым требуется (size1,size2,channels)
. Им нужна эта форма, потому что они должны соответствующим образом применять сверточные фильтры.
Это также относится к повторяющимся слоям, которым требуется (timeSteps,featuresPerStep)
для выполнения своих повторяющихся вычислений.
Модели MNIST
Опять же, нет никаких обязательств по формированию вашего имиджа определенным образом. Вы должны делать это в зависимости от того, какой первый слой вы выберете и чего вы хотите достичь. Это бесплатно.
Многие примеры просто не заботятся о том, чтобы изображение было двухмерным структурированным объектом, и они просто используют модели, занимающие 784 пикселя. Достаточно. Вероятно, они начинаются с Dense
слоев, требующих формы типа (size,)
.
Другие примеры могут иметь значение и использовать форму (28,28)
, но тогда эти модели должны будут изменить форму ввода, чтобы соответствовать потребностям следующего слоя.
Сверточные слои 2D потребуют (28,28,1)
.
Основная идея: входные массивы должны соответствовать input_shape
или input_dim
.
Тензорные формы
Однако будьте осторожны при чтении сообщений об ошибках Keras или работе с пользовательскими слоями / слоями лямбда.
Во всех этих формах, которые мы определили ранее, не учитывается важный параметр: размер партии или количество образцов.
Внутренне все тензоры будут иметь это дополнительное измерение в качестве первого измерения. Keras сообщит об этом как None
(размер, который адаптируется к любому размеру пакета).
Таким образом, input_shape=(784,)
будет отображаться как (None,784)
.
И input_shape=(28,28,1)
будет отображаться как (None,28,28,1)
И ваши фактические входные данные должны иметь форму, которая соответствует указанной форме.
person
Daniel Möller
schedule
10.09.2017