CNN-разделить изображения на обучение / валидацию / тестирование

Как отметил @CEvenhuis в вопросительном комментарии, вам нужен экземпляр основной формы.

(И вам вообще не нужны методы расширения. Никогда не делайте - они просто позволяют вызвать код, чтобы выглядеть и чувствовать себя иначе. Но в этом случае в коде, который вы показали, вы просто давая именам животных известным, существующим методам.)

В любом случае, в «дочерней» форме вы можете иметь поле для ссылки на экземпляр основной формы.

Form _parent;

И используйте его как

private void bnTrBack_Click(objects sender, EventArgs e)
{
    _parent.Show();
    Close();
}

Или, если ребенок является только дочерним по отношению к основной форме,

Main _main;

private void bnTrBack_Click(objects sender, EventArgs e)
{
    _main.Show();
    Close();
}

Вопрос заключается в том, как установить поле.

Его можно установить в конструкторе:

ReadOnly Main _main;

И смените созданный конструктором код:

    public Child()
    {
        InitializeComponent();
    }

на

    public Child(Main main)
    {
        InitializeComponent();
        _main = main;
    }

Немного отступив, вместо того, чтобы скрывать основную форму, вы можете вместо этого - , если это необходимо - показать дочернюю форму в качестве модального диалога и получить обратно простой результат после его закрытия:

var result = new Child().ShowDialog(); 

В общем, есть две вещи, которые можно оценить по поводу вариантов:

  1. Пользовательский интерфейс: отображаются ли элементы управления пользователей в способ, которым они могут понять и таким образом, который позволяет им следовать за желаемыми рабочими процессами?
  2. Связь между классами: какие классы зависят от того, какие классы и каким образом? Есть ли хороший план для передачи данных и управления?

0
задан Hongarc 19 January 2019 в 07:24
поделиться

1 ответ

Вопрос 1:

По моему опыту, нет никаких заметных ограничений в именовании переменных y, x. Например, в этом ядре человек использует y_train, y_test имен для меток, а здесь человек использует train_Y. Есть правило, что вы должны давать имена, которые показывают, о чем эта переменная.

Вопрос 2:

Я бы рекомендовал использовать параметр validation_split в ImageDataGenerator ( doc ) для настройки доли изображений, зарезервированных Проверка. После этого я рекомендую использовать параметр subset в flow_from_directory ( doc ) для определения переменных training_generator и validation generator. (Я хочу указать, что flow_from_directory возвращает генератор, а не данные).

Итак, ваш код будет выглядеть так:

data_generator = ImageDataGenerator(
    validation_split=0.2,
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
)

train_generator = data_generator.flow_from_directory(
    './images/train',
    target_size = (28, 28),
    batch_size = 86,
    class_mode = 'binary',
    color_mode='rgb',
    classes=None, subset="training"
)

validation_generator = data_generator.flow_from_directory(
    './images/train',
    target_size = (28, 28),
    batch_size = 86,
    class_mode = 'binary',
    color_mode='rgb',
    classes=None, subset="validation"
)

history=classifier.fit_generator(
    train_generator,
    steps_per_epoch = (8000 / 86),
    epochs = 2,
    validation_data = validation_generator,
    validation_steps = 8000/86,
    callbacks=[learning_rate_reduction]
)
0
ответ дан Arkady. A 19 January 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: