Как отметил @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:
По моему опыту, нет никаких заметных ограничений в именовании переменных 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]
)