Keras框架作线性回归和非线性回归

线性回归

import keras
import numpy as np
import matplotlib.pyplot as plt
#按顺序构成的模型
from keras.models import Sequential
#Dense全连接层
from keras.layers import Dense  
#构建一个顺序模型
model=Sequential()

#在模型中添加一个全连接层
#units是输出维度,input_dim是输入维度(shift+两次tab查看函数参数)
model.add(Dense(units=1,input_dim=1))   

#编译模型
model.compile(optimizer='sgd',loss='mse')   #optimizer参数设置优化器,loss设置目标函数

#训练模型
for step in range(3001):
    #每次训练一个批次
    cost=model.train_on_batch(x_data,y_data)
    #每500个batch打印一个cost值
    if step%500==0:
        print('cost:',cost)

#打印权值和偏置值
W,b=model.layers[0].get_weights()   #layers[0]只有一个网络层
print('W:',W,'b:',b)

#x_data输入网络中,得到预测值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()

这里写图片描述

非线性回归(非线性激活函数)

#加激活函数的方法1:mode.add(Activation(''))
from keras.optimizers import SGD
from keras.layers import Dense,Activation
import numpy as np

np.random.seed(0)
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

#构建一个顺序模型
model=Sequential()

#在模型中添加一个全连接层
#units是输出维度,input_dim是输入维度(shift+两次tab查看函数参数)
#输入1个神经元,隐藏层10个神经元,输出层1个神经元
model.add(Dense(units=10,input_dim=1))
model.add(Activation('tanh'))   #增加非线性激活函数
model.add(Dense(units=1))   #默认连接上一层input_dim=10
model.add(Activation('tanh'))

#定义优化算法(修改学习率)
defsgd=SGD(lr=0.3)

#编译模型
model.compile(optimizer=defsgd,loss='mse')   #optimizer参数设置优化器,loss设置目标函数

#训练模型
for step in range(3001):
    #每次训练一个批次
    cost=model.train_on_batch(x_data,y_data)
    #每500个batch打印一个cost值
    if step%500==0:
        print('cost:',cost)

#打印权值和偏置值
W,b=model.layers[0].get_weights()   #layers[0]只有一个网络层
print('W:',W,'b:',b)

#x_data输入网络中,得到预测值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()

这里写图片描述

#加激活函数的方法2:model.add(Dense(units=10,input_dim=1,activation=' '))
from keras.optimizers import SGD
from keras.layers import Dense,Activation
#构建一个顺序模型
model=Sequential()

#在模型中添加一个全连接层
#units是输出维度,input_dim是输入维度(shift+两次tab查看函数参数)
#输入1个神经元,隐藏层10个神经元,输出层1个神经元
model.add(Dense(units=10,input_dim=1,activation='relu'))   #增加非线性激活函数
model.add(Dense(units=1,activation='relu'))   #默认连接上一层input_dim=10

#定义优化算法(修改学习率)
defsgd=SGD(lr=0.3)

#编译模型
model.compile(optimizer=defsgd,loss='mse')   #optimizer参数设置优化器,loss设置目标函数

#训练模型
for step in range(3001):
    #每次训练一个批次
    cost=model.train_on_batch(x_data,y_data)
    #每500个batch打印一个cost值
    if step%500==0:
        print('cost:',cost)

#打印权值和偏置值
W,b=model.layers[0].get_weights()   #layers[0]只有一个网络层
print('W:',W,'b:',b)

#x_data输入网络中,得到预测值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()

这里写图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值