Форма входа сверточной нейронной сети (CNN) - PullRequest
0 голосов
/ 10 февраля 2020

Я новичок в CNN, и у меня есть вопрос относительно CNN. Я немного запутался по поводу формы ввода CNN (особенно с Keras). Мои данные - это 2D данные (скажем, 10X10) в разных временных интервалах. Поэтому у меня есть 3D данные. Я собираюсь передать эти данные в мою модель, чтобы предсказать предстоящий временной интервал. Итак, у меня будет определенное количество временных интервалов для прогнозирования (скажем, 10 слотов, пока у меня могут быть данные 10X10X10). Теперь мой вопрос заключается в том, что я должен иметь дело с этими данными как 2D-изображение с 10 каналами (как обычные данные в изображениях CNN, RGB) или как 3D-данные. (conv2D или conv3D в Керасе).

Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 07 апреля 2020

В вашем случае, Conv2D будет полезно. Пожалуйста, обратитесь к описанию ниже для понимания формы ввода Convolution Neural Network (CNN), используя Conv2D.

Посмотрим, как выглядит форма ввода. Входные данные для CNN будут выглядеть следующим образом. Мы предполагаем, что наши данные представляют собой набор изображений.

enter image description here

Форма ввода имеет (batch_size, height, width, channels). В случае RGB изображение будет иметь канал 3, а изображение greyscale будет иметь канал 1.

Давайте рассмотрим следующий код

import tensorflow as tf
from tensorflow.keras.layers import Conv2D

model=tf.keras.models.Sequential()
model.add(Conv2D(filters=64, kernel_size=1, input_shape=(10,10,3)))
model.summary()

Вывод:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 10, 10, 64)        256       
=================================================================

Хотя это выглядит так, как если бы входная форма была 3D, но вы должны передать массив 4D во время подгонки данных, которые должны быть как (batch_size, 10, 10, 3). Поскольку в аргументе input_shape нет значения размера пакета, мы можем go с любым размером пакета при подборе данных.

Выходная форма равна (None, 10, 10, 64). Первое измерение представляет размер партии, который на данный момент составляет None. Потому что сеть не знает размер пакета заранее.

Note: После того, как вы подгоните данные, None будет заменен размером пакета, который вы задаете при подгонке данных.

Давайте рассмотрим другой код с пакетом Размер

    import tensorflow as tf
    from tensorflow.keras.layers import Conv2D

    model=tf.keras.models.Sequential()
    model.add(Conv2D(filters=64, kernel_size=1, batch_input_shape=(16,10,10,3)))
    model.summary()

Вывод:

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (16, 10, 10, 64)          256       
=================================================================

Здесь я заменил аргумент input_shape на batch_input_shape. Как следует из названия, этот аргумент будет запрашивать размер пакета заранее, и вы не сможете указать какой-либо другой размер пакета во время подбора данных.

...