input shape keras что это

Боковая панель

НАЧАЛО РАБОТЫ

МОДЕЛИ

ПРЕДОБРАБОТКА

ПРИМЕРЫ

Sequential model: руководство

Модель Sequential представляет собой линейный стек слоев.

Вы может создать модель Sequential, передав список слоев конструктору модели:

from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([Dense(32, input_shape=(784,)),
Activation(‘relu’),
Dense(10),
Activation(‘softmax’),])
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation(‘relu’))

Указание размерности входных данных

Ваша модель должна знать, какую размерность данных ожидать на входе. В связи с этим, первый слой модели Sequential (и только первый, поскольку последующие слои производят автоматический расчет размерности) должен получать информацию о размерности входных данных. Есть несколько способов сделать это:

Таким образом, следующие примеры эквивалентны:

model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, input_dim=784))

Компиляция

Перед обучением модели необходимо настроить сам процесс. Это выполняется с помощью метода compile(). Он получает три аргумента:

# Задача бинарной классификации
model.compile(optimizer=’rmsprop’, loss=’binary_crossentropy’, metrics=[‘accuracy’])

# Среднеквадратичная ошибка регрессии
model.compile(optimizer=’rmsprop’, loss=’mse’)

# Пользовательская метрика
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer=’rmsprop’, loss=’binary_crossentropy’, metrics=[‘accuracy’, mean_pred])

Обучение

Модели Keras обучаются на Numpy-массивах, содержащих набор исходных данных и метки. Для обучения обычно используется функция fit(). Документация по этой функции здесь.

# Модель с одномерными входными данными и бинарной классификацией

model.add(Dense(32, activation=’relu’, input_dim=100))

# Генерируем случайные данные

import numpy as np

data = np.random.random((1000, 100))

labels = np.random.randint(2, size=(1000, 1))

# Обучаем модель, перебирая данные в пакетах по 32 примера

model.fit(data, labels, epochs=10, batch_size=32)

# Модель с одномерными входными данными и 10 классами

model.add(Dense(32, activation=’relu’, input_dim=100))

# Генерируем случайные данные

import numpy as np

data = np.random.random((1000, 100))

labels = np.random.randint(10, size=(1000, 1))

# Преобразуем метки в OHE (one-hot encoding)

one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)

# Обучаем модель, перебирая данные в пакетах по 32 примера

model.fit(data, one_hot_labels, epochs=10, batch_size=32)

Примеры

Вот несколько примеров, с которых можно начать!

В папке примеров вы также найдете варианты решения задач с реальными наборами данных:

Многослойный персептрон (MLP) для мультиклассовой классификаци (softmax):

import keras

from keras.models import Sequential

from keras.layers import Dense, Dropout, Activation

from keras.optimizers import SGD

# Генерируем случайные данные

import numpy as np

x_train = np.random.random((1000, 20))

y_train = keras.utils.to_categorical(
np.random.randint(10, size=(1000, 1)), num_classes=10)

x_test = np.random.random((100, 20))

y_test = keras.utils.to_categorical(
np.random.randint(10, size=(100, 1)), num_classes=10)

# Dense(64) — это полносвязный слой с 64 скрытыми нейронами.

# в первом слое вы должны указать размерность входных данных:

# здесь, это векторы длинной 20.

model.add(Dense(64, activation=’relu’, input_dim=20))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

score = model.evaluate(x_test, y_test, batch_size=128)

MLP для бинарной классификации:

import numpy as np

from keras.models import Sequential

from keras.layers import Dense, Dropout

# Генерируем случайные данные

x_train = np.random.random((1000, 20))

y_train = np.random.randint(2, size=(1000, 1))

x_test = np.random.random((100, 20))

y_test = np.random.randint(2, size=(100, 1))

model.add(Dense(64, input_dim=20, activation=’relu’))

score = model.evaluate(x_test, y_test, batch_size=128)

VGG-подобная сверточная сеть:

import numpy as np

import keras

from keras.models import Sequential

from keras.layers import Dense, Dropout, Flatten

from keras.layers import Conv2D, MaxPooling2D

from keras.optimizers import SGD

# Генерируем случайные данные

x_train = np.random.random((100, 100, 100, 3))

y_train = keras.utils.to_categorical(
np.random.randint(10, size=(100, 1)), num_classes=10)

x_test = np.random.random((20, 100, 100, 3))

y_test = keras.utils.to_categorical(
np.random.randint(10, size=(20, 1)), num_classes=10)

# применим здесь сверточный слой с 32 нейронами и ядром свертки (3, 3)

model.add(Conv2D(32, (3, 3), activation=’relu’,
input_shape=(100, 100, 3)))

model.add(Conv2D(32, (3, 3), activation=’relu’))

model.add(Conv2D(64, (3, 3), activation=’relu’))

model.add(Conv2D(64, (3, 3), activation=’relu’))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

model.fit(x_train, y_train, batch_size=32, epochs=10)

score = model.evaluate(x_test, y_test, batch_size=32)

Классификация последовательностей с помощью LSTM:

from keras.models import Sequential

from keras.layers import Dense, Dropout

from keras.layers import Embedding

from keras.layers import LSTM

model.fit(x_train, y_train, batch_size=16, epochs=10)

score = model.evaluate(x_test, y_test, batch_size=16)

Классификация последовательностей с помощью одномерной свертки:

from keras.models import Sequential

from keras.layers import Dense, Dropout

from keras.layers import Embedding

from keras.layers import Conv1D, GlobalAveragePooling1D, MaxPooling1D

model.add(Conv1D(64, 3, activation=’relu’,
input_shape=(seq_length, 100)))

model.add(Conv1D(64, 3, activation=’relu’))

model.add(Conv1D(128, 3, activation=’relu’))

model.add(Conv1D(128, 3, activation=’relu’))

model.fit(x_train, y_train, batch_size=16, epochs=10)

score = model.evaluate(x_test, y_test, batch_size=16)

Классификация последовательностей с помощью LSTM с памятью:

В этой модели мы накладываем 3 слоя LSTM друг на друга, делая модель способной изучать временные представления более высокого уровня.

Первые два слоя возвращают свои полные выходные последовательности, но последний слой возвращает только последний шаг своей выходной последовательности. Таким образом отбрасывается временное измерение (то есть входная последовательность преобразуется в один вектор).

from keras.models import Sequential

from keras.layers import LSTM, Dense

import numpy as np

# ожидаемая размерность входных данных:
# (batch_size, timesteps, data_dim)

model.add(LSTM(32, return_sequences=True,

input_shape=(timesteps, data_dim)))
# возвращает последовательность векторов длинной 32

model.add(LSTM(32, return_sequences=True))

# возвращает последовательность векторов длинной 32

model.add(LSTM(32)) # возвращает одиночный векторов длинной 32

# Генерируем случайные данные

x_train = np.random.random((1000, timesteps, data_dim))

Читайте также:  какой оив устанавливает класс энергоэффективности мкд

y_train = np.random.random((1000, num_classes))

# Генерируем случайные проверочные данные

x_val = np.random.random((100, timesteps, data_dim))

y_val = np.random.random((100, num_classes))

LSTM с передачей состояния

Рекуррентная модель с состоянием — это модель, для которой внутренней состояние, полученное после обработки очередного пакета данных, повторно используется в качестве начальных состояний для выборок следующей серии. Это позволяет обрабатывать более длинные последовательности.

from keras.models import Sequential

from keras.layers import LSTM, Dense

import numpy as np

# ожидаемая размерность входных данных:
# (batch_size, timesteps, data_dim)

# Обратите внимание, что мы должны указать полную размерность входных

# данных batch_input_shape, так как это сеть с состоянием

# i-тый пример в k-ом пакете является продолжением

# i-того примера в k-1-ом пакете

model.add(LSTM(32, return_sequences=True, stateful=True,

batch_input_shape=(batch_size, timesteps, data_dim)))

model.add(LSTM(32, return_sequences=True, stateful=True))

model.add(LSTM(32, stateful=True))

# Генерируем случайные данные

x_train = np.random.random((batch_size * 10, timesteps, data_dim))

y_train = np.random.random((batch_size * 10, num_classes))

# Генерируем случайные проверочные данные

x_val = np.random.random((batch_size * 3, timesteps, data_dim))

y_val = np.random.random((batch_size * 3, num_classes))

batch_size=batch_size, epochs=5, shuffle=False,

Источник

Объяснение ввода Keras: input_shape, unit, batch_size, dim и т. Д.

Например, в документе сказано units указать форму вывода слоя.

На изображении нейронной сети ниже hidden layer1 имеется 4 единицы. Относится ли это непосредственно к units атрибуту Layer объекта? Или units в Керасе форма каждого веса в скрытом слое равна числу единиц?

Единицы:

Количество «нейронов», или «клеток», или того, что слой имеет внутри.

Это свойство каждого слоя, и да, оно связано с выходной формой (как мы увидим позже). На вашей картинке, кроме входного слоя, который концептуально отличается от других слоев, у вас есть:

Формы

Пример: форма (30,4,10) означает массив или тензор с 3 измерениями, содержащими 30 элементов в первом измерении, 4 во втором и 10 в третьем, всего 30 * 4 * 10 = 1200 элементов или чисел.

Форма ввода

То, что течет между слоями, является тензором. Тензоры можно рассматривать как матрицы, с формами.

Каждый тип слоя требует ввода с определенным количеством измерений:

Теперь форма ввода является единственной, которую вы должны определить, потому что ваша модель не может ее знать. Только вы знаете это, основываясь на ваших данных обучения.

Все остальные формы рассчитываются автоматически на основе единиц и особенностей каждого слоя.

При заданной входной форме все остальные формы являются результатами вычислений слоев.

«Единицы» каждого слоя будут определять выходную форму (форму тензора, который создается слоем и который будет входом следующего слоя).

Каждый тип слоя работает определенным образом. Плотные слои имеют форму вывода, основанную на «единицах», сверточные слои имеют форму вывода, основанную на «фильтрах». Но это всегда основано на некотором свойстве слоя. (Смотрите документацию для каждого слоя)

Давайте покажем, что происходит со «плотными» слоями, тип которых показан на вашем графике.

Веса будут полностью автоматически рассчитываться на основе входных и выходных форм. Опять же, каждый тип слоя работает определенным образом. Но веса будут матрицей, способной преобразовывать входную форму в выходную форму с помощью некоторой математической операции.

В плотном слое веса умножают все входные данные. Это матрица с одним столбцом на вход и одной строкой на единицу, но это часто не важно для базовых работ.

На изображении, если бы на каждой стрелке был номер умножения, все числа вместе образовали бы матрицу весов.

Формы в Керасе

Поскольку форма ввода является единственной, которую вам нужно определить, Keras потребует ее на первом слое.

Но в этом определении Keras игнорирует первое измерение, которое является размером партии. Ваша модель должна иметь возможность работать с любым размером партии, поэтому вы определяете только другие измерения:

В любом случае, тензоры в модели будут иметь размерность партии.

Кроме того, в продвинутых работах, когда вы фактически воздействуете непосредственно на тензоры (например, внутри слоев Lambda или в функции потерь), размер размера партии будет там.

Если ваша входная форма имеет только одно измерение, вам не нужно указывать ее как кортеж, вы даете ее input_dim как скалярное число.

Итак, в вашей модели, где ваш входной слой имеет 3 элемента, вы можете использовать любой из этих двух:

Но когда мы имеем дело непосредственно с тензорами, часто dim ссылаются на то, сколько измерений имеет тензор. Например, тензор с формой (25,10909) имеет 2 измерения.

Определение вашего изображения в Керасе

PS: здесь я проигнорировал другие аспекты, такие как функции активации.

С последовательной моделью :

С функциональной моделью API :

Формы тензоров

Помните, что при определении слоев вы игнорируете размеры пакетов:

Уточнение входного размера:

Не прямой ответ, но я просто понял, что слово «входное измерение» может быть достаточно запутанным, так что будьте осторожны:

Читайте также:  при сбое щитовидной железы какие симптомы у женщин

Это (только слово измерение) может относиться к:

а) измерение входных данных (или потока) таких как # N осей датчика для передачи сигнала временного ряда или цветового канала RGB (3): предлагаемое слово => «Размерность InputStream»

b) Общее количество / длина Входных объектов (или Входного слоя) (28 x 28 = 784 для цветного изображения MINST) или 3000 в преобразованных значениях спектра FFT, или

«Входной слой / Размер входного объекта»

c) Размерность (# размерности) ввода (обычно 3D, как и ожидалось в Keras LSTM) или (#RowofSamples, #of Senors, #of Values ​​..) 3 является ответом.

«N Размерность ввода»

d) СПЕЦИАЛЬНАЯ Форма входа (например, (30,50,50,3) в этих развернутых данных входного изображения или (30, 250, 3), если развернутые Keras:

Keras имеет свой input_dim, относящийся к размеру входного слоя / числу входных объектов

В Keras LSTM это относится к общему времени.

Термин был очень запутанным, правильным, и мы живем в очень запутанном мире!

Я считаю, что одной из задач машинного обучения является работа с разными языками или диалектами и терминологией (например, если у вас 5–8 разных версий английского языка, вам необходимо очень хорошее владение языком для общения с разными носителями). Возможно, то же самое относится и к языкам программирования.

Источник

Боковая панель

НАЧАЛО РАБОТЫ

МОДЕЛИ

ПРЕДОБРАБОТКА

ПРИМЕРЫ

Основные слои

Dense

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer=’glorot_uniform’, bias_initializer=’zeros’, kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

Просто обычный плотно связанный слой NN.

Dense реализует операцию: output = activation(dot(input, kernel) + bias), где активация — это функция активации по элементам, переданная в качестве аргумента активации, кернел — это матрица весов, созданная слоем, а смещение — это вектор смещения, созданный слоем (применимо только в случае, если use_bias — True).

Замечание: если вход в слой имеет ранг больше 2, то он сглаживается перед исходным точечным продуктом с кернелом

Пример

# как первый слой в последовательной модели:

model.add(Dense(32, input_shape=(16,)))# теперь модель будет принимать в качестве входных массивов фигуры (*, 16)# и выходных массивов фигуры (*, 32)

# после первого слоя, больше не нужно указывать# размер входного сигнала:

Аргументы

Форма ввода

тензор nD с формой: (batch_size, …, input_dim). Наиболее распространенная ситуация — 2D-ввод с формой (batch_size, input_dim).

Форма вывода

тензор nD с формой: (размер партии, …, units). Например, для 2D-входа с формой (batch_size, input_dim) выход будет иметь форму (batch_size, units).

Activation

Применяет функцию активации к выводу.

Аргументы

Форма ввода

Произвольно. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включает ось отсчета) при использовании этого слоя в качестве первого слоя в модели.

Форма вывода

Та же форма, что и при вводе.

Dropout

keras.layers.Dropout(rate, noise_shape=None, seed=None)

Применяет исключение (дропаут) на вводе.

Dropout состоит в случайной установке доли единиц ввода в 0 при каждом обновлении во время обучения, что помогает предотвратить переобучение (оверфиттинг).

Аргументы

Ссылки

Flatten

keras.layers.Flatten(data_format=None)

Выравнивает вход. Не влияет на размер партии.

Аргументы

/.keras/keras.json. Если вы никогда не устанавливали его, то это будет «channels_last».

Пример

model.add(Conv2D(64, (3, 3),

input_shape=(3, 32, 32), padding=’same’,))# теперь: model.output_shape == (None, 64, 32, 32)

model.add(Flatten())# теперь: model.output_shape == (None, 65536)

Input

Input() используется для инстанцирования тензора Keras..

Тензор Keras — это объект тензора из подложки (Theano, TensorFlow или CNTK), который мы дополняем определенными атрибутами, позволяющими построить модель Keras, просто зная входы и выходы модели.

Например, если a, b и c — тензоры Кераса, то можно сделать: model = Model(input=[a, b], output=c].

Добавлены атрибуты Кераса: Форма Кераса: Кортеж интегральной формы, распространяемый через умозаключение формы Keras-сайд. _keras_history: Из этого слоя можно рекурсивно извлечь весь граф слоя.

Аргументы

Возврат

Пример

# это логистическая регрессия в Keras. #

y = Dense(16, activation=’softmax’)(x)

Reshape

Реформирует выход в определенную форму.

Аргументы

Форма ввода

Произвольно, хотя все размеры в форме входа должны быть зафиксированы. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включает ось партии) при использовании этого слоя в качестве первого слоя в модели.

Форма вывода

Пример

# как первый слой в последовательной модели.

model.add(Reshape((3, 4), input_shape=(12,)))# now: model.output_shape == (None, 3, 4)# примечание: `None` — это измерение партии.

# как промежуточный слой в последовательной модели.

model.add(Reshape((6, 2)))# теперь: model.output_shape == (None, 6, 2)

# также поддерживает умозаключение формы, используя `-1` в качестве измерения.

model.add(Reshape((-1, 2, 2)))# теперь: model.output_shape == (None, 3, 2, 2)

Permute

Сохраняет размеры входного сигнала в соответствии с заданным образцом.

Полезно, например, для соединения RNN и свёртков.

Пример

model.add(Permute((2, 1), input_shape=(10, 64)))# теперь: model.output_shape == (None, 64, 10)# примечание: `None` — измерение партии

Аргументы

Форма ввода

Произвольно. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включает ось отсчета) при использовании этого слоя в качестве первого слоя в модели.

Читайте также:  Что значит стилистическая ошибка

Форма вывода

То же самое, что и Форма ввода, но с измененным порядком размеров в соответствии с заданной деталью.

RepeatVector

Повторяет ввод n раз.

Пример

model.add(Dense(32, input_dim=32))# now: model.output_shape == (None, 32)# примечание: `None` — это измерение партии.

model.add(RepeatVector(3))# теперь: model.output_shape == (None, 3, 32)

Аргументы

Форма ввода

2D тензор формы (num_samples, features).

Форма вывода

3D тензор формы (num_samples, n, features).

Lambda

keras.layers.Lambda(function, output_shape=None, mask=None, Arguments=None)

Обертывает произвольное выражение как объект Слоя.

Примеры

model.add(Lambda(lambda x: x ** 2))

# добавьте слой, который возвращает конкатенцию# положительной части входа и # противоположной отрицательной части.

def antirectifier(x):

x = K.l2_normalize(x, axis=1)

return K.concatenate([pos, neg], axis=1)

def antirectifier_output_shape(input_shape):

assert len(shape) == 2 # только для 2D тензоров

return tuple(shape)

# добавьте слой, возвращающий произведение Адамара# и сумму из двух входных тензоров.

def hadamard_product_sum(tensors):

out1 = tensors[0] * tensors[1]

out2 = K.sum(out1, axis=-1)

return [out1, out2]

def hadamard_product_sum_output_shape(input_shapes):

assert shape1 == shape2 # в противном случае произведение Адамара невозможно

return [tuple(shape1), tuple(shape2[:-1])]

layer = Lambda(hadamard_product_sum, hadamard_product_sum_output_shape)

x_hadamard, x_sum = layer([x1, x2])

Аргументы

Форма ввода

Произвольно. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включает ось отсчета) при использовании этого слоя в качестве первого слоя в модели.

Форма вывода

Указывается аргументом output_shape (или auto-inferred при использовании TensorFlow или CNTK).

ActivityRegularization

Слой, который применяет обновление к входной деятельности, основанной на функции затрат.

Аргументы

Форма ввода

Произвольно. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включает ось отсчета) при использовании этого слоя в качестве первого слоя в модели.

Форма вывода

Та же форма, что и при вводе.

Masking

Маскирует последовательность, используя значение маски для пропуска таймфреймов.

Если все возможности для заданного временного отрезка равны значению mask_value, то временной отрезок будет замаскирован (пропущен) во всех последующих слоях (до тех пор, пока они поддерживают маскировку).

Если какой-либо последующий слой не поддерживает маскировку, но получает такую входную маску, то исключение будет поднято.

Пример

Рассмотрим массив данных Numpy x формы (образцы, временные интервалы, возможности), который будет передан в LSTM слой. Вы хотите маскировать образец #0 в timestep #3, и образец #2 в timestep #5, потому что вам не хватает возможностей для этих примеров timesteps. Вы можете это сделать:

model.add(Masking(mask_value=0., input_shape=(timesteps, features)))

Аргументы

SpatialDropout1D

Пространственная 1D версия Dropout.

Эта версия выполняет ту же функцию, что и Dropout, однако вместо отдельных элементов выпадают целые карты 1D-функций. Если соседние кадры на картах объектов сильно коррелированы (как это обычно бывает в ранних слоях свертки), то регулярное отсеивание не приводит к регуляризации активаций, а в противном случае просто приводит к снижению эффективности обучения. В этом случае, SpatialDropout1D будет способствовать независимости между картами объектов и должен использоваться вместо этого..

Аргументы

Форма ввода

3D тензор с формой: (samples, timesteps, channels)

Форма вывода

То же, что и при вводе

Ссылки

SpatialDropout2D

keras.layers.SpatialDropout2D(rate, data_format=None)

Пространственная 2D версия Dropout.

Эта версия выполняет ту же функцию, что и Dropout, однако вместо отдельных элементов выпадают целые карты 2D-функций. Если смежные пиксели на картах объектов сильно коррелированы (как это обычно бывает в ранних слоях свертки), то регулярное отсеивание не приводит к регуляризации активаций, а в противном случае просто приводит к снижению эффективности обучения. В этом случае, SpatialDropout2D будет способствовать независимости между картами объектов и должен использоваться вместо них.

Аргументы

/.keras/keras.json. Если вы никогда не устанавливали его, то это будет «channels_last».

Форма ввода

4D тензор с формов: (samples, channels, rows, cols) если data_format=’channels_first’ или 4D тензор с формов: (samples, rows, cols, channels) если data_format=’channels_last’.

Форма вывода

То же, что и при вводе

Ссылки

SpatialDropout3D

keras.layers.SpatialDropout3D(rate, data_format=None)

Пространственная 3D версия Dropout.

Эта версия выполняет ту же функцию, что и Dropout, однако она удаляет целые карты 3D-функций вместо отдельных элементов. Если соседние воксели на картах объектов сильно коррелированы (как это обычно бывает в ранних слоях свертки), то регулярное отсеивание не приводит к регуляризации активаций, а в противном случае просто приводит к снижению эффективности обучения. В этом случае, SpatialDropout3D будет способствовать независимости между картами объектов и должен использоваться вместо них.

Аргументы

/.keras/keras.json. Если вы никогда не устанавливали его, то это будет «channels_last».

Форма ввода

5D тензор с формой: (samples, channels, dim1, dim2, dim3) если data_format=’channels_first’ или тензор с формой: (samples, dim1, dim2, dim3, channels) если data_format=’channels_last’.

Форма вывода

То же, что и при вводе

Ссылки

Источник

Сказочный портал