Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Нейронные сети можно использовать для моделирования задач регрессии, которые по сути представляют собой модели нейронных сетей с одним входом и одним выходом.
1. Импорт связанных модулей
1. numpy: используется для генерации обучающих данных
2. pyplot: используется для построения точечных диаграмм и визуального отображения результатов подгонки.
3. Последовательный: последовательная модель (путем наложения нескольких слоев, построения глубокой нейронной сети).
4. Плотный: полностью связанный нейронный слой
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
2. Генерация данных
Сгенерируйте 500 случайных данных, добавьте к ним случайный шум, а затем сгенерируйте график рассеяния случайных данных.
# 使用numpy生成500个随机点
x_data = np.random.rand(500)
# 添加噪声
noise = np.random.normal(0,0.01,x_data.shape)
y_data = x_data*0.1 + 0.2 + noise
#散点图
plt.scatter(x_data,y_data)
plt.show()
3. Постройте модель
Используйте Sequential, чтобы построить модель, а затем используйте model.add, чтобы добавить нейронный слой, который представляет собой плотный полносвязный нейронный слой. Плотный полносвязный нейронный слой имеет два параметра, один из которых является размерностью входных данных, а другие единицы представляют количество нейронов, то есть количество выходных единиц. Если вам нужно добавить следующий нейронный слой, вам не нужно определять широту входных данных, потому что он по умолчанию использует выходные данные предыдущего слоя в качестве входных данных текущего слоя. Затем используйте model.compile для установки функции потерь и оптимизатора.Функция ошибок использует среднеквадратичную ошибку mse, оптимизатор использует метод стохастического градиентного спуска sgd.
# 构建神经网络模型
model = Sequential()
# 在模型中添加全连接层
model.add(Dense(units=1,input_dim=1))
# 选定loss函数和优化器
# mse :Mean Squared Error,均方误差
# sgd:Stochastic gradient descent,随机梯度下降法
model.compile(loss='mse', optimizer='sgd')
В-четвертых, модель обучения
При обучении используйте model.train_on_batch для обучения x_data, y_data в пакетах. Возвращаемое значение по умолчанию — стоимость, и результат выводится каждые 500 шагов. Наконец, распечатайте веса и смещения после тренировки.
#训练过程
print('Training -----------')
#训练5001个批次
forstepinrange(5001):
cost = model.train_on_batch(x_data, y_data)
ifstep % 500 == 0:
print("After %d trainings, the cost: %f"% (step, cost))
#打印权值和偏置值
W, b = model.layers[0].get_weights()
print('Weights=', W,'\nbiases=', b)
5. Визуализируйте результаты тренировки
Наконец, результаты прогнозирования наносятся на график и сравниваются со значениями обучающего набора.
# 将训练结果绘出
# 预测值y_pred
Y_pred = model.predict(x_data)
# 随机点的散点图
plt.scatter(x_data, y_data)
# 显示预测结果
plt.plot(x_data, Y_pred,'r',lw = 3)
plt.show()