keras 2_非线性回归
import matplotlib.pyplot as plt
import keras
import numpy as np
# Sequantial 按顺序构成的模型
from keras.models import Sequential
# Dense全连接层
from keras.layers import Dense,Activation
from keras.optimizers import SGD
# 生成数据
# 在0.5到-0.5之间生成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()
# 构建一个顺序模型
model = Sequential()
# 在模型中添加全连接层
model.add(Dense(units=500,input_dim=1)) # units:表示输出参数的维度,input:表示输入参数的维度
# 加入激活函数
model.add(Activation('tanh'))
model.add(Dense(units=1,input_dim=500))
model.add(Activation('tanh'))
# 自定义优化算法
sgd = SGD(lr=0.3)
# sgd:随机梯度下降算法
# mse:均方误差
model.compile(optimizer=sgd,loss='mse')
# 训练模型
for step in range(100000):
# 使用batch训练
cost = model.train_on_batch(x_data, y_data)
# 每500个batch打印一次cost值
if step % 500==0:
print("cost",cost)
# 打印权值与偏执
# w0,b0 = model.layers[0].get_weights()
# 将x_data 输入进网络中,得到预测值
y_pred = model.predict(x_data)
# 显示原始点分布结果
plt.scatter(x_data,y_data)
# 显示预测结果
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()
plt.savefig("pic.jpg")
# 进行预测,但是在预测前需要利用numpy将数据转换下
data=[100]
predict1 = model.predict(np.asarray(data))
print(predict1)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5a66a86f028e4a05b93449c5acbd6a5d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YOt5bqG5rGd,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9f8865dd6b4e4334ae2ac864b6140982.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YOt5bqG5rGd,size_20,color_FFFFFF,t_70,g_se,x_16)