Как задать выходы нейронной сети
Имеется нейронная сеть, которая классифицирует объекты на изображении (два класса). Должно быть два выхода: Для тренировочных изображений имеется четыре координаты квадрата, в котором находится изображение на фотографии. Нужно иметь 1 выход на класс и четыре выхода на координаты квадрата (нормализованные к единице). Куда подаются данные о классе. Куда нужно записывать данные о координатах. Как можно вывести данные о координатах Буду благодарен, если подскажете ответ на один из вопросов: Как задавать выходы? Как использовать обученную сеть, чтобы на фото отображался класс (1 или ноль)? Архитектура сети: Слой свертки, размер ядра 3х3, количество карт признаков - 32 шт., функция активации ReLU. Слой подвыборки, выбор максимального значения из квадрата 2х2. Слой свертки, размер ядра 3х3, количество карт признаков - 32 шт., функ. Слой свертки, размер ядра 3х3, количество карт признаков - 64 шт., функция активации ReLU. Слой подвыборки, выбор максимального значения из квадрата 2х2. Слой преобразования из двумерного в одномерное представление. Полносвязный слой, 64 нейрона, функция активации ReLU. Слой Dropout. Выходной слой, 1 нейрон, функция активации sigmoid. Слои с 1 по 6 используются для выделения важных признаков в изображении, а слои с 7 по 10 - для классификации.
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Conv2D, MaxPooling2D
from tensorflow.python.keras.layers import Activation, Dropout, Flatten, Dense
img_width, img_height = 50, 50
input_shape = (img_width, img_height, 3)
epochs = 1
batch_size = 16
nb_train_samples = len(os.listdir(train_dir + "/cat")) + len(os.listdir(train_dir + "/dog"))
nb_validation_samples = len(os.listdir(val_dir + "/cat")) + len(os.listdir(val_dir + "/dog"))
nb_test_samples = len(os.listdir(test_dir + "/cat")) + len(os.listdir(test_dir + "/dog"))
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
val_generator = datagen.flow_from_directory(
val_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
test_generator = datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=val_generator,
validation_steps=nb_validation_samples // batch_size)
scores = model.evaluate_generator(test_generator, nb_test_samples // batch_size)