keras学习笔记--非线性回归

该文章是基于哔哩哔哩上贾老师的视频记录的,链接在此:keras入门_哔哩哔哩_bilibili

语言:python,编程工具jupyter

2.非线性回归

对y=x^2+noise的值进行预测,与线性回归不同之处在于不能再继续用一条直线来预测结果了,需要绘制一条平滑的曲线去描述结果。

(1)导包

import tensorflow as tf
import tensorflow.keras
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Activation
from tensorflow.keras.optimizers import SGD

(2)获取随机点作为输入和噪声,并定义输出函数,绘制原始图作为对比。

np.linspace():NumPy - np.linspace()_陆-CSDN博客

np.random.normai():np.random.normal()函数_熊大的博客-CSDN博客_np.random.normal

#使用numpy生成200个随机点
x_data = np.linspace(-0.5,0.5,200)
noise = np.random.normal(0,0.02,x_data.shape)
y_data = np.square(x_data)+noise

#显示随机点
plt.scatter(x_data,y_data)
plt.show()

keras学习笔记--非线性回归_第1张图片

(3)构建模型并训练

模型结构为1-10-1(输入层-隐藏层-输出层)

#构建一个顺序模型
model=Sequential()
#在模型中添加一个全连接层(输出一维,输入一维)
#1-10-1,还要再加激活函数!超强大的sigmod!
model.add(Dense(units=10,input_dim=1))#第一层10出1进
model.add(Activation('tanh'))#这是第一种激活函数写法,下面第二种
model.add(Dense(units=1,activation='tanh'))#第二层1出10进(不写input会自动连接上一层输出)

#定义优化算法(learning ratio学习率改为0.3)
sgd=SGD(lr=0.3)
#sgd:随机梯度下降法stochastic gradient descent
#mse:均方误差mean squared error
model.compile(optimizer=sgd,loss='mse')

#训练3001个批次,每次都重复使用x_data,y_data中的数据
for step in range(3001):
    #每次训练一个批次,随机梯度每次都更新(批量梯度要全部扫一次)
    cost=model.train_on_batch(x_data,y_data)
    #每五百个batch打印一次cost值观察拟合程度
    if step%500==0:
        print('cost:',cost)
        
#打印权值和偏置值:
W,b=model.layers[0].get_weights()
print('W:',W,'b:',b)
    
#x_data输入网络中,得到预测值y_pred
y_pred=model.predict(x_data)
 
#显示随机点:X坐标,Y坐标
plt.scatter(x_data,y_data)
#显示预测结果:X坐标,Y坐标,颜色red,线粗3
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()

 结果:

keras学习笔记--非线性回归_第2张图片

 

你可能感兴趣的:(深度学习,回归,keras,python)