Керрас входные объяснение: форма ввода, единиц, размер пакета, Дим, и т. д
для любого слоя Keras (Layer
class), может кто-нибудь объяснить, как понять разницу между input_shape
, units
, dim
, etc.?
например, док говорит units
укажите выходную форму слоя.
на изображении нейронной сети ниже hidden layer1
4 единицы. Это напрямую переводится на на
2 ответов
единицы измерения:
количество "нейронов", или "клеток", или того, что слой имеет внутри него.
это свойство каждого слоя, и да, оно связано с выходной формой (как мы увидим позже). На вашем изображении, за исключением входного слоя, который концептуально отличается от других слоев, у вас есть:
- скрытый слой 1: 4 единицы (4 нейрона)
- скрытый слой 2: 4 единицы
- последние слой: 1 блок
формы
формы являются последствиями конфигурации модели. Фигуры-это кортежи, представляющие количество элементов массива или тензора в каждом измерении.
Ex: форму (30,4,10)
означает массив или тензор с 3 измерениями, содержащий 30 элементов в первом измерении, 4 во втором и 10 в третьем, итого 30*4*10 = 1200 элементов или чисел.
вход форма
какие потоки между слоями тензоров. Тензоры можно рассматривать как матрицы с фигурами.
в Keras сам входной слой является не слоем, а тензором. Это стартовый тензор, который вы отправляете в первый скрытый слой. Этот тензор должен иметь ту же форму, что и ваши тренировочные данные.
пример: если у вас есть 30 изображений 50x50 пикселей в RGB (3 канала), форма ваших входных данных (30,50,50,3)
. Тогда ваш тензор входного слоя должен имейте эту форму (см. Детали В разделе "формы в keras").
каждый тип слоя требует ввода с определенным числом измерений:
-
Dense
слои требуют входных данных как(batch_size, input_size)
- или
(batch_size, optional,...,optional, input_size)
- или
- 2Д-сверточные слои нужны входы,:
- при использовании
channels_last
:(batch_size, imageside1, imageside2, channels)
- при использовании
channels_first
:(batch_size, channels, imageside1, imageside2)
- при использовании
- 1D свертки и рекуррентные слои используют
(batch_size, sequence_length, features)
теперь входная форма является единственной, которую вы должны определить, потому что ваша модель не может ее знать. Только вы знаете это, основываясь на ваших тренировочных данных.
все остальные фигуры вычисляются автоматически на основе единиц и особенности каждого слоя.
отношение между фигурами и единицами-выходная форма
учитывая входную форму, все остальные формы являются результатами слоев проведенные расчеты.
"единицы" каждого слоя будут определять выходную форму (форму тензора, который создается слоем и который будет входом следующего слоя).
каждый тип слоя работает определенным образом. Плотные слои имеют выходную форму на основе "единиц", сверточные слои имеют выходную форму на основе"фильтров". Но он всегда основан на каком-то свойстве слоя. (См. документацию для того, что выводит каждый слой)
давайте что происходит с "плотные" слои, которые показаны на диаграмме.плотный слой имеет выходную форму (batch_size,units)
. Итак, да, единицы измерения, свойство слоя, также определяет выходную форму.
- скрытый слой 1: 4 единиц, выходная форма:
(batch_size,4)
. - скрытый слой 2: 4 единицы, выходная форма:
(batch_size,4)
. - последний слой: 1 блок, форма вывода:
(batch_size,1)
.
весом
веса будут полностью автоматически рассчитываться на основе входных и выходных фигур. Опять же, каждый тип слоя работает определенным образом. Но веса будут матрицей, способной преобразовать входную форму в выходную форму с помощью некоторой математической операции.
в плотном слое веса умножают все входы. Это матрица с одним столбцом на вход и одной строкой на единицу, но это часто не важно для basic завод.
на изображении, если каждая стрелка имеет номер умножения на нем, все числа вместе образуют матрицу веса.
фигуры в Керасе
ранее я привел пример 30 изображений, 50x50 пикселей и 3 канала, имеющих входную форму (30,50,50,3)
.
поскольку входная форма является единственной, которую вам нужно определить, Keras потребует ее в первом слое.
но в этом определении Керас игнорирует первое размерность-размер партии. Ваша модель должна иметь возможность работать с любым размером партии, поэтому вы определяете только другие размеры:
input_shape = (50,50,3)
#regardless of how many images I have, each image has this shape
необязательно, или когда это требуется некоторыми видами моделей, вы можете передать форму, содержащую размер партии через batch_input_shape=(30,50,50,3)
или batch_shape=(30,50,50,3)
. Это ограничивает ваши возможности обучения этим уникальным размером партии, поэтому его следует использовать только тогда, когда это действительно необходимо.
в любом случае вы выбираете, тензоры в модели будут иметь партию измерение.
Итак, даже если вы использовали input_shape=(50,50,3)
, когда keras отправляет вам сообщения или когда вы печатаете сводку модели, она покажет (None,50,50,3)
.
первое измерение-это размер партии, это None
потому что он может варьироваться в зависимости от того, сколько примеров вы даете для обучения. (Если размер пакета определен явно, то вместо None
)
также, в предварительных работах, когда вы фактически работаете сразу на тензоры (например, внутри лямбда-слоев или в функции потерь), размер партии будет там.
- таким образом, при определении входной формы вы игнорируете размер пакета:
input_shape=(50,50,3)
- при выполнении операций непосредственно на тензорах форма будет снова
(30,50,50,3)
- когда keras отправляет вам сообщение, форма будет
(None,50,50,3)
или(30,50,50,3)
, в зависимости от того, какое сообщение он отправляет вам.
Dim
и в конце концов, что такое dim
?
если ваша входная форма имеет только одно измерение, вам не нужно давать ее как кортеж, вы даете input_dim
как скалярное количество.
Итак, в вашей модели, где ваш входной слой имеет 3 элемента, вы можете использовать любой из этих двух:
-
input_shape=(3,)
-- запятая нужна, когда у вас есть только одно измерение -
input_dim = 3
но когда имеешь дело непосредственно с тензорами, часто dim
будет ссылаться на то, сколько измерений имеет тензор. Например, тензор с формой (25,10909) имеет 2 измерения.
определение вашего изображения в Keras
у Кераса есть два способа сделать это,Sequential
модели, или функциональный API Model
. Мне не нравится использовать последовательную модель, позже вам все равно придется ее забыть, потому что вам понадобятся модели с ветвями.
PS: здесь я проигнорировал другие аспекты, такие как функции активации.
С последовательной моделью:
from keras.models import Sequential
from keras.layers import *
model = Sequential()
#start from the first hidden layer, since the input is not actually a layer
#but inform the shape of the input, with 3 elements.
model.add(Dense(units=4,input_shape=(3,))) #hidden layer 1 with input
#further layers:
model.add(Dense(units=4)) #hidden layer 2
model.add(Dense(units=1)) #output layer
С функциональной моделью API:
from keras.models import Model
from keras.layers import *
#Start defining the input tensor:
inpTensor = Input((3,))
#create the layers and pass them the input tensor to get the output tensor:
hidden1Out = Dense(units=4)(inpTensor)
hidden2Out = Dense(units=4)(hidden1Out)
finalOut = Dense(units=1)(hidden2Out)
#define the model's start and end points
model = Model(inpTensor,finalOut)
формы тензоров
помните, что вы игнорируете размеры пакетов при определении слоев:
- inpTensor:
(None,3)
- hidden1Out:
(None,4)
- hidden2Out:
(None,4)
- finalOut:
(None,1)
Размер Входного Сигнала Уточненный:
не прямой ответ, но я просто понял, что размер ввода слова может быть достаточно запутанным, поэтому будьте осторожны:
Это (только измерение слова) может относиться к:
a)размерность входных данных (или поток) например, # N осей датчиков для передачи сигнала временного ряда или цветовой канал RGB (3): предлагаемое слово=> "InputStream Dimension"
b)общее количество /длина Входные Функции (или входной слой) (28 x 28 = 784 для цветного изображения MINST) или 3000 в преобразованных значениях спектра FFT, или
"Размер Входного Слоя / Входного Объекта"
c)размерность (#размерности) входных данных (обычно 3D, как ожидалось в Keras LSTM) или (#RowofSamples, #Senors, #значений..) 3 ответа.
"N размерность входного сигнала"
d) специфическая форма входного сигнала (напр. (30,50,50,3) в этом развернутом входном изображении или (30, 250, 3) если развернуто Керрас:
Keras имеет свой input_dim ссылается на размер входного слоя / номер входного объекта
model = Sequential()
model.add(Dense(32, input_dim=784)) #or 3 in the current posted example above
model.add(Activation('relu'))
в Keras LSTM это относится к шагам общего времени
термин был очень запутанным, правильным, и мы живем в очень запутанном мире!!
Я считаю, что одна из проблем в машинном обучении-иметь дело с разными языками или диалектами и терминологий (например, если у вас 5-8 очень разные версии английского языка, то вам нужно очень высокое мастерство, чтобы общаться с разными носителями). Вероятно, то же самое происходит и в языках программирования.