Найти в Дзене
ЦифроПроф

Загрузчики данных

Чтобы покупателям супермаркета не приходилось запоминать и вводить код весового продукта, руководство магазина решило разработать систему компьютерного зрения. Она сама определит, какие фрукты или овощи лежат на весах. Датасет с фотографиями плодов находится в папке /datasets/fruits_small/. Задача 1 В прекоде создана свёрточная сеть. Допишите код так, чтобы передать ей на обучение и валидацию датасет с фруктами. Чтобы обучение не было слишком долгим, вызовите функцию fit() с шагом 1. from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, AveragePooling2D, Flatten, Dense datagen = ImageDataGenerator(validation_split=0.25) train_datagen_flow = datagen.flow_from_directory('/datasets/fruits_small/', target_size=(150, 150), batch_size=16, class_mode='sparse', subset='training', seed=12345) # < напишите код здесь > val_datagen_flow = datagen.flow_from_directory('/datasets/fruits_small/',
Картинка из открытых источников
Картинка из открытых источников

Чтобы покупателям супермаркета не приходилось запоминать и вводить код весового продукта, руководство магазина решило разработать систему компьютерного зрения. Она сама определит, какие фрукты или овощи лежат на весах.

Датасет с фотографиями плодов находится в папке /datasets/fruits_small/.

Задача 1

В прекоде создана свёрточная сеть. Допишите код так, чтобы передать ей на обучение и валидацию датасет с фруктами.

Чтобы обучение не было слишком долгим, вызовите функцию fit() с шагом 1.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Conv2D, AveragePooling2D, Flatten, Dense

datagen = ImageDataGenerator(validation_split=0.25)

train_datagen_flow = datagen.flow_from_directory('/datasets/fruits_small/', target_size=(150, 150), batch_size=16, class_mode='sparse', subset='training', seed=12345) # < напишите код здесь >

val_datagen_flow = datagen.flow_from_directory('/datasets/fruits_small/',

target_size=(150, 150),

batch_size=16,

class_mode='sparse',

# указываем, что это загрузчик для валидационной выборки

subset='validation',

seed=12345) # < напишите код здесь >

model = Sequential()

model.add(Conv2D(filters=6,

kernel_size=(3, 3),

activation='relu',

input_shape=(150, 150, 3)))

model.add(AveragePooling2D(pool_size=(2, 2)))

model.add(Flatten())

model.add(Dense(units=12, activation='softmax'))

model.compile(loss='sparse_categorical_crossentropy',

optimizer='adam', metrics=['acc'])

model.fit(train_datagen_flow,# < напишите код здесь >

validation_data=val_datagen_flow,# < напишите код здесь >,

# Чтобы обучение не было слишком долгим, указываем

# количество шагов равным 1

steps_per_epoch=1,

validation_steps=1,

verbose=2, epochs=1)

Задача 2

Сделайте предобработку данных: поделите значения яркости на 255. Для этого передайте специальный аргумент в загрузчик ImageDataGenerator (найдите в документации), в котором будет указано, что делить нужно на 255.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(validation_split=0.25, rescale=1/255)

train_datagen_flow = datagen.flow_from_directory(

'/datasets/fruits_small/',

target_size=(150, 150),

batch_size=16,

class_mode='sparse',

subset='training',

seed=12345)

val_datagen_flow = datagen.flow_from_directory(

'/datasets/fruits_small/',

target_size=(150, 150),

batch_size=16,

class_mode='sparse',

subset='validation',

seed=12345)

features, target = train_datagen_flow.next()

print(features[0])