Keras — это библиотека глубокого обучения, представляющая из себя высокоуровневый API, написанный на Python. По сути это интерфейс для работы с другой, более сложной библиотекой — TensorFlow.
Задача 1
Обучите модель линейной регрессии средствами библиотеки Keras. Метод fit() напечатает на экране прогресс обучения и значение ошибки. Чтобы формат ответа был понятным, добавьте в этот метод аргумент verbose=2, где 2 означает вывод в консоль. Если указать 0, то его не будет вовсе; если — 1, то вывод предназначен для Jupyter Notebook.
import pandas as pd
from sklearn.linear_model import LinearRegression
data = pd.read_csv('/datasets/train_data_n.csv')
features = data.drop('target', axis=1)
target = data['target']
model = LinearRegression()
model.fit(features, target)
from tensorflow import keras
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=1, input_dim=features.shape[1]))
model.compile(loss='mean_squared_error', optimizer='sgd')
model.fit(features, target, verbose=2)
Задача 2
Подберите такое количество эпох, чтобы получить MSE стабильно меньше 6.55. Добавить эпохи можно, указав аргумент epochs в методе model.fit().
import pandas as pd
from tensorflow import keras
data = pd.read_csv('/datasets/train_data_n.csv')
features = data.drop('target', axis=1)
target = data['target']
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=1, input_dim=features.shape[1]))
model.compile(loss='mean_squared_error', optimizer='sgd')
model.fit(features, target, verbose=2, epochs=5)
Задача 3
Найдите значение функции потерь на валидационной выборке. Передайте модели валидационную выборку в аргументе validation_data метода model.fit(). Загрузка валидационной выборки уже в прекоде.
import pandas as pd
from tensorflow import keras
data_train = pd.read_csv('/datasets/train_data_n.csv')
features_train = data_train.drop('target', axis=1)
target_train = data_train['target']
data_valid = pd.read_csv('/datasets/test_data_n.csv')
features_valid = data_valid.drop('target', axis=1)
target_valid = data_valid['target']
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=1, input_dim=features_train.shape[1]))
model.compile(loss='mean_squared_error', optimizer='sgd')
model.fit(features_train, target_train, validation_data=(features_valid, target_valid), verbose=2, epochs=5)
Логистическая регрессия в Keras
Задача 1
Обучите логистическую регрессию на данных, загруженных в прекоде. Установите количество эпох, равным пяти.
Чтобы напечатать прогресс обучения, задайте аргумент verbose=2 в функции fit().
import pandas as pd
from tensorflow import keras
df = pd.read_csv('/datasets/train_data_n.csv')
df['target'] = (df['target'] > df['target'].median()).astype(int)
features_train = df.drop('target', axis=1)
target_train = df['target']
df_val = pd.read_csv('/datasets/test_data_n.csv')
df_val['target'] = (df_val['target'] > df['target'].median()).astype(int)
features_valid = df_val.drop('target', axis=1)
target_valid = df_val['target']
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=1, input_dim=features_train.shape[1], activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd')
model.fit(features_train, target_train, validation_data=(features_valid, target_valid), verbose=2, epochs=5)
Задача 2
Найдите accuracy модели на валидационной выборке. Предсказания модели вычисляются функцией predict(), как в sklearn. Сигмоида вернёт числа от 0 до 1, преобразуйте их в классы, сравнив с 0.5.
Напечатайте на экране значение accuracy (уже в прекоде). Чтобы выводу не мешал прогресс обучения, задайте verbose=0.
import pandas as pd
from tensorflow import keras
from sklearn.metrics import accuracy_score
df = pd.read_csv('/datasets/train_data_n.csv')
df['target'] = (df['target'] > df['target'].median()).astype(int)
features_train = df.drop('target', axis=1)
target_train = df['target']
df_val = pd.read_csv('/datasets/test_data_n.csv')
df_val['target'] = (df_val['target'] > df['target'].median()).astype(int)
features_valid = df_val.drop('target', axis=1)
target_valid = df_val['target']
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=1, input_dim=features_train.shape[1],
activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd')
model.fit(features_train, target_train, epochs=5, verbose=0,
validation_data=(features_valid, target_valid))
predictions = model.predict(features_valid) > 0.5
score=accuracy_score(target_valid, predictions)
print("Accuracy:", score)
Задача 3
Обучение нейронной сети обычно занимает много времени. Сделайте так, чтобы отследить качество модели можно было на каждой эпохе. Для этого добавьте параметр metrics=['acc'] (от англ. accuracy) в методе compile().
Чтобы улучшить значение accuracy, обучите модель на десяти эпохах.
import pandas as pd
from tensorflow import keras
from sklearn.metrics import accuracy_score
df = pd.read_csv('/datasets/train_data_n.csv')
df['target'] = (df['target'] > df['target'].median()).astype(int)
features_train = df.drop('target', axis=1)
target_train = df['target']
df_val = pd.read_csv('/datasets/test_data_n.csv')
df_val['target'] = (df_val['target'] > df['target'].median()).astype(int)
features_valid = df_val.drop('target', axis=1)
target_valid = df_val['target']
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=1, input_dim=features_train.shape[1],
activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['acc'])
model.fit(features_train, target_train, epochs=10, verbose=2,
validation_data=(features_valid, target_valid))
Полносвязные нейронные сети в Keras
Полносвязные слои в Keras создаются вызовом метода Dense(). Что нужно сделать, чтобы построить многослойную полносвязную сеть? Несколько раз добавить полносвязный слой.
Задача 1
Добавьте в нейронную сеть ещё один слой. Пусть у первого скрытого слоя будет 10 нейронов units с сигмоидной активацией. Во втором выходном слое будет один нейрон с сигмоидой: её рассмотрим как вероятность класса «1».
Обучите нейронную сеть на 10 эпохах, напечатав на экране прогресс обучения.
import pandas as pd
from tensorflow import keras
from sklearn.metrics import accuracy_score
df = pd.read_csv('/datasets/train_data_n.csv')
df['target'] = (df['target'] > df['target'].median()).astype(int)
features_train = df.drop('target', axis=1)
target_train = df['target']
df_val = pd.read_csv('/datasets/test_data_n.csv')
df_val['target'] = (df_val['target'] > df['target'].median()).astype(int)
features_valid = df_val.drop('target', axis=1)
target_valid = df_val['target']
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=10, input_dim=features_train.shape[1],
activation='sigmoid'))
model.add(keras.layers.Dense(units=1, input_dim=features_train.shape[1],
activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['acc'])
model.fit(features_train, target_train, epochs=10, verbose=2,
validation_data=(features_valid, target_valid))