Создание пакетов в массиве, содержащем изображения

У меня есть массив X_train, содержащий 9957 изображений. Я делаю сверточную сеть. Желаемая форма массива для подачи в модель (размер партии, канал, высота, ширина)

X_train.shape #gives (9957, 60, 80, 3)
X_train[1].shape #gives (60, 80, 3)

Если мы используем

np.reshape(X_train,(-1, 3, 60, 80)) #it gives (9957, 3, 60, 80)

Как я могу получить каждый массив с формой (размер партии, 3, 60, 80) и окончательный массив изображений для обучения с формой (9957, размер партии, 3, 60, 80)?


person TulakHord    schedule 06.01.2019    source источник


Ответы (1)


Вы можете получить от i-го изображения до i + batchsize изображения следующим образом.

batchsize = 16
i = 0

X_batch = X_train[i: i+batchsize]
print('X_batch.shape: ', X_batch.shape)  # it should be (16, 3, 60, 80)

Пожалуйста, измените i на цикл for, чтобы получить каждое изображение. Например,

for i in range(0, len(X_train), batchsize):
    X_batch = X_train[i: i+batchsize]

    # --- Do something with X_batch ---  
person corochann    schedule 06.01.2019
comment
по какой-то причине он меняет форму массива на (5, 3, 60, 80). - person TulakHord; 06.01.2019
comment
9957 == 16 * 622 + 5, 5 — остаток. Но сначала вам следует обратиться к официальному руководству Chainer, в котором рекомендуется использовать chainer.datasets - person Yuki Hashimoto; 07.01.2019
comment
модель = Sequential( L.Convolution2D (нет, 128, 3, 2), F.relu, L.Convolution2D (128, 64, 3, 2), F.relu, L.Convolution2D (64, 32, 3, 2) , F.relu, L.Linear(None, 16), F.dropout, L.Linear(16, 4)) Это модель... мой тренировочный набор имеет форму (9957, 3, 60, 80). Имеет ли он правильный input_shape? - person TulakHord; 07.01.2019
comment
Вы используете L.Convolution2D(None, 128, 3, 2) в качестве первого слоя, а первый аргумент None означает, что размер входного канала первого слоя определяется автоматически (в вашем случае размер канала входных данных равен 3). Так что можно использовать эту модель. Что касается высоты и ширины изображения, его размер изменяется во время операции свертки, но опять же, когда вы вводите L.Linear(None, 16), его размер определяется автоматически. - person corochann; 07.01.2019
comment
Моя окончательная форма изображения — (32,3,60,80), а форма метки — (32,). И изображение, и метка input_shape подходят для обучения? - person TulakHord; 11.01.2019
comment
После 100 эпох моя основная точность и точность проверки остаются прежними. - person TulakHord; 13.01.2019
comment
Да.. Я могу обучить модель. Но он показывает постепенно увеличивающуюся основную/тренировочную точность с 0,78 до 0,98, а точность проверки изменяется с 0,79 до 0,66 после 100 эпох. Иногда основная точность и точность проверки вообще не меняются. Я думаю, что это признаки перетренированности. Однако я попытался добавить отсев в модель, но основная точность и точность проверки изменились очень мало (коэффициент 1). - person TulakHord; 13.01.2019
comment
Я думаю, что это не ошибка вашей программы, но это обычное поведение машинного обучения. Невозможно на 100% ответить на правильную метку невидимых данных проверки. - person corochann; 13.01.2019
comment
Достаточно ли эта модель подходит для предсказания меток изображений? И что я могу сделать, чтобы повысить точность модели? - person TulakHord; 13.01.2019