В этом посте я хочу рассказать о закономерностях, которые могут находить нейросети. Во многих руководствах для начинающих акцент делается на технике написания кода для нейронных сетей, при этом вопросы «логики» (что могут нейросети? какие архитектуры лучше подходят для каких задач и почему?) часто остаются в стороне. Я надеюсь, мой пост поможет начинающим лучше понять возможности нейронных сетей. Для этого мы попробуем посмотреть, как они справляются с некоторыми модельными задачами. Примеры кода будут приводиться на python с использованием библиотеки keras.
Задача 1. Начнём с простого. Построим нейронную сеть, аппроксимирующую синус.
Получаем следующий график:
Как видим, нейронная сеть успешно справилась с задачей аппроксимации несложной функции.
Задача 1. Начнём с простого. Построим нейронную сеть, аппроксимирующую синус.
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
def get_X_y(n):
X = np.random.uniform(0, np.pi, n)
y = np.sin(X)
return X, y
n = 40
X, y = get_X_y(n)
print("X shape:", X.shape)
model = Sequential()
model.add(Dense(6, input_dim=1, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'])
model.fit(X, y, epochs=1000, batch_size=4)
X_test = np.linspace(start=0, stop=np.pi, num=500)
print("X test shape:", X_test.shape)
y_test = model.predict(X_test)
font = {'weight': 'bold',
'size': 25}
matplotlib.rc('font', **font)
axes = plt.gca()
axes.set_ylim(0, 1)
plt.plot(X_test, y_test, c='green', marker='o', markersize=5)
plt.title("Sinus approximated by neural network")
plt.yticks(np.arange(0, 1, 0.1))
plt.grid()
plt.show()
Получаем следующий график:
Как видим, нейронная сеть успешно справилась с задачей аппроксимации несложной функции.