Оценка времени как критерия завершения обучения последовательной нейронной сети Keras ⇐ Python
Оценка времени как критерия завершения обучения последовательной нейронной сети Keras
Я разработал модель нейронной сети, показанную ниже, которая имеет два скрытых слоя с 19 узлами. Первоначальная активация — «тан».
Как видите, у меня было два первоначальных критерия обратного вызова. Первый из них основан на EarlyStopping, если точность не меняется в течение 10 последовательных эпох, а второй (time_callback) рассчитывает прошедшее время в каждой эпохе.
После запуска этой модели у меня есть общее время, прошедшее до достижения последней эпохи (назовем это «t»).
Теперь вопрос в том, что мне нужно снова запустить модель, но на этот раз использовать, например, «relu» в качестве активации. Однако мне придется удалить «es» и другие критерии обратного вызова и вместо этого установить рассчитанное время «t» в качестве критерия остановки. В другом мире вторая модель с функцией «relu» должна продолжать обучение только до времени «t», а затем останавливается!
Кто-нибудь знает, как это настроить?!
класс TimeHistory(keras.callbacks.Callback): def on_train_begin(self, logs={}): self.times = [] def on_epoch_begin(self, пакет, журналы={}): self.epoch_time_start = time.time() def on_epoch_end(self, пакет, журналы={}): self.times.append(time.time() - self.epoch_time_start) модель = Последовательный() model.add(Dense(19, input_shape=[X_train.shape[1]], активация='tanh', name="layer1")) model.add(Dense(19, активация='tanh', name="layer2")) model.add(Dense(1, active='sigmoid', name="Output")) model.compile(loss='binary_crossentropy',оптимизатор='адам', метрики=['точность']) time_callback = История времени() es = EarlyStopping(monitor='val_accuracy', mode='max', verbose=1, терпение=10) # подходит для сети история = model.fit(X_train, y_train, валидация_сплит=0,3, эпохи=1000, размер_пакета = 10, перемешать = Ложь, подробный = 1, обратные вызовы=[es,time_callback]) раз = time_callback.times #Затем мы переходим ко второй модели с функцией relu модель2 = Последовательный() model2.add(Dense(19, input_shape=[X_train.shape[1]], active='relu', name="layer1")) model2.add(Dense(19, активация='relu', name="layer2")) model2.add(Dense(1,activation='sigmoid', name="Output")) model2.compile(loss='binary_crossentropy',оптимизатор='адам', метрики=['точность']) история2 = model2.fit(X_train, y_train, валидация_сплит=0,3, эпохи=100, размер_пакета = 10, перемешать = Ложь, подробный = 1, обратные вызовы =??????????????????)
Я разработал модель нейронной сети, показанную ниже, которая имеет два скрытых слоя с 19 узлами. Первоначальная активация — «тан».
Как видите, у меня было два первоначальных критерия обратного вызова. Первый из них основан на EarlyStopping, если точность не меняется в течение 10 последовательных эпох, а второй (time_callback) рассчитывает прошедшее время в каждой эпохе.
После запуска этой модели у меня есть общее время, прошедшее до достижения последней эпохи (назовем это «t»).
Теперь вопрос в том, что мне нужно снова запустить модель, но на этот раз использовать, например, «relu» в качестве активации. Однако мне придется удалить «es» и другие критерии обратного вызова и вместо этого установить рассчитанное время «t» в качестве критерия остановки. В другом мире вторая модель с функцией «relu» должна продолжать обучение только до времени «t», а затем останавливается!
Кто-нибудь знает, как это настроить?!
класс TimeHistory(keras.callbacks.Callback): def on_train_begin(self, logs={}): self.times = [] def on_epoch_begin(self, пакет, журналы={}): self.epoch_time_start = time.time() def on_epoch_end(self, пакет, журналы={}): self.times.append(time.time() - self.epoch_time_start) модель = Последовательный() model.add(Dense(19, input_shape=[X_train.shape[1]], активация='tanh', name="layer1")) model.add(Dense(19, активация='tanh', name="layer2")) model.add(Dense(1, active='sigmoid', name="Output")) model.compile(loss='binary_crossentropy',оптимизатор='адам', метрики=['точность']) time_callback = История времени() es = EarlyStopping(monitor='val_accuracy', mode='max', verbose=1, терпение=10) # подходит для сети история = model.fit(X_train, y_train, валидация_сплит=0,3, эпохи=1000, размер_пакета = 10, перемешать = Ложь, подробный = 1, обратные вызовы=[es,time_callback]) раз = time_callback.times #Затем мы переходим ко второй модели с функцией relu модель2 = Последовательный() model2.add(Dense(19, input_shape=[X_train.shape[1]], active='relu', name="layer1")) model2.add(Dense(19, активация='relu', name="layer2")) model2.add(Dense(1,activation='sigmoid', name="Output")) model2.compile(loss='binary_crossentropy',оптимизатор='адам', метрики=['точность']) история2 = model2.fit(X_train, y_train, валидация_сплит=0,3, эпохи=100, размер_пакета = 10, перемешать = Ложь, подробный = 1, обратные вызовы =??????????????????)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение