Найти в Дзене
ЦифроПроф

Библиотека Keras

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)
Оглавление
Фото из открытых источников
Фото из открытых источников

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))