Как задать выходы нейронной сети

Имеется нейронная сеть, которая классифицирует объекты на изображении (два класса). Должно быть два выхода: Для тренировочных изображений имеется четыре координаты квадрата, в котором находится изображение на фотографии. Нужно иметь 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)

Ответы (0 шт):