Рубрики
Без рубрики

KERAS Обучение с ранним обратным вызовом, чтобы избежать перенапряжения

Вот еще один простой учебник о том, как тренировать простую нейронную сеть с обратным вызовом. Отличная особенность, чтобы избежать переоценки

Автор оригинала: Alex Polymath.

Привет меня зовут Алекс.

Я изучаю машинное обучение. И когда я закончу какую-то задачу, мне нравится публиковать его. Так что люди могут найти простые образцы, чтобы начать.

Вы можете запустить Google Colab или использовать свой компьютер.

Обзор

В этом руководстве мы охватим

  1. Как Сплит данные в тест и поезд
  2. Как Скомпилируйте нейронную сеть с керами
  3. Как Нарисуйте живую диаграмму точности нейронной сети

1. Загрузить данные из Kaggle.

Там будет 2 файла

  • train.csv.zip
  • test.csv.zip Я не имею, почему, но Тест Файл не имеет никакого смысла, Так как там нет оттушек.

https://www.kaggle.com/oddrationale/mnist-in-csv

2. Если вы используете Google Colab

Drag’n’drop rain.csv.zip Файл к файлам

3. Раскрызнуть файл

!unzip train.csv.zip

3. Импортируйте другие вещи, которые нам нужны

!pip install livelossplot
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import keras
from keras.callbacks import EarlyStopping


from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from livelossplot import PlotLossesKeras

4. Приготовьте данные

train_df = pd.read_csv('/content/train.csv') #might be in other place
train_labels = train_df['label'] #We need Y values - labels
train_labels = train_labels.to_numpy() # nothing smart just convert to numpy array
del train_df['label'] # remove label from original dataframe to use it as X
train_data = train_df.to_numpy()


# we can't use values 1,2,3,4,4,5 for Y
# instead we should use smth like [1,0,0,0,0,0], [0,1,0,0,0,0], ...
y = LabelBinarizer().fit_transform(train_labels) 


#Split train and test data
X_train, X_test, y_train, y_test = train_test_split(train_data, y, test_size=0.1)


# Ok, ready to go

5. Скомпилируйте нейронную сеть

# Define sequential model

model = keras.Sequential()

# Define the first layer
model.add(keras.layers.Dense(128, activation="relu", input_shape=(784,)))
model.add(keras.layers.Dense(128, activation="relu", input_shape=(128,)))
model.add(keras.layers.Dense(128, activation="relu", input_shape=(128,)))
model.add(keras.layers.Dense(128, activation="relu", input_shape=(128,)))

# Add activation function to classifier
model.add(keras.layers.Dense(10, activation='softmax'))

# Finish the modecl compilation
model.compile('adam', loss='categorical_crossentropy', metrics=['accuracy'])

# patience - how many epochs to wait before stop training
# if there is no further improvement 
monitor_val_acc = EarlyStopping(monitor = 'val_loss', patience = 5)

# Complete the model fit operation

# callbacks=[PlotLossesKeras()] - this is a single magic line of code which draw #live chart

#Also we set up big epochs size, just to test that easly stopping is working
model.fit(train_data, y, epochs=10000000, validation_data=(X_test, y_test), callbacks=[PlotLossesKeras(), monitor_val_acc], verbose=0)
Скачать (1) .png

Потрясающе, ты сделал это!

Теперь вы можете обучить нейронную сеть для обнаружения покемонов!