赞
踩
要求:
#这个demo,做一个简单的线性回归预测
# 步骤:
# 目标:是使得网络模型拟和一条 y=2*x+1 的函数图像,
# 1、首先在 y=2*x+1 附近生成一些点,其中的x作为输入数据,y作为输出数据
# 2、训练一个神经网络模型,包括100个神经元的全连接层和最终1个神经元的输出层。下面会提供网络模型图片
# 3、训练大概1万次左右,即更新一万次参数。最后随机给出几个x,预测是否符合 y=2*x+1 的标准
# 4、给改模型做一个keras的可视化分析
import numpy as np import keras from keras import Sequential import matplotlib.pyplot as plt number = 100 x = np.linspace(-100,100,number) y = 2*x+1+np.random.rand(number)*(number*0.3) # print(y) plt.scatter(x,y) plt.xlabel("x number") plt.ylabel("y real number") plt.title("x & y scatter graph") # plt.plot(x,y) plt.show() # print (x)
运行结果:生成在 y=2*x+1 上下震荡的数据。
模型结构搭建:
from keras.layers import Dense from keras.layers import Dropout from keras import optimizers model = Sequential() model.add(Dense(100,kernel_initializer='uniform',activation="relu")) model.add(Dropout(0.25)) model.add(Dense(1)) sgd = optimizers.SGD(lr=0.000001, decay=1e-6, momentum=0.9, nesterov=True) # 学习率要设置小一点,否则直接nan model.compile(loss='mse',optimizer=sgd) # loss根据目标不同设置不同的损失函数,常用有交叉嫡,均方差 model.fit(x,y,batch_size=100,epochs=500,verbose=1) # 一共更新参数500次 # fit 中的 verbose: # verbose:日志显示 # verbose = 0 为不在标准输出流输出日志信息 # verbose = 1 为输出进度条记录 # verbose = 2 为每个epoch输出一行记录
运行结果(以下图截取部分):
x_test = x[50:100]
y_test = y[50:100]
y_pred = model.predict(x_test)
plt.scatter(x_test,y_test)
plt.plot(x_test,y_pred)
plt.show()
运行结果:散点表示真实数据,直线是我们预测数据
模型可视化很简单,直接调用keras库即可。
# keras网络结构可视化
from keras.utils import plot_model
plot_model(model,show_shapes='True')
运行结果:
print(model.summary())
运行结果:
本人在google colab环境下完成编码。以下代码也能在jupyter notebook上运行。个人推荐google colab,至于为什么,详见
Google colab使用之手把手教学
#这个demo,做一个简单的线性回归预测 # 步骤: # 目标:是使得网络模型拟和一条 y=2*x+1 的函数图像, # 1、首先在 y=2*x+1 附近生成一些点,其中的x作为输入数据,y作为输出数据 # 2、训练一个神经网络模型,包括100个神经元的全连接层和最终1个神经元的输出层。下面会提供网络模型图片 # 3、训练大概1万次左右,即更新一万次参数。最后随机给出几个x,预测是否符合 y=2*x+1 的标准 # 4、给改模型做一个keras的可视化分析 # 1、生成数据 import numpy as np import keras from keras import Sequential import matplotlib.pyplot as plt number = 100 x = np.linspace(-100,100,number) y = 2*x+1+np.random.rand(number)*(number*0.3) plt.scatter(x,y) plt.xlabel("x number") plt.ylabel("y real number") plt.title("x & y scatter graph") plt.show() # 2、训练模型 from keras.layers import Dense from keras.layers import Dropout from keras import optimizers model = Sequential() model.add(Dense(100,kernel_initializer='uniform',activation="relu")) model.add(Dropout(0.25)) model.add(Dense(1)) sgd = optimizers.SGD(lr=0.000001, decay=1e-6, momentum=0.9, nesterov=True) # 学习率要设置小一点,否则直接nan model.compile(loss='mse',optimizer=sgd) # loss根据目标不同设置不同的损失函数,常用有交叉嫡,均方差 model.fit(x,y,batch_size=100,epochs=500,verbose=1) # 一共更新参数500次 # fit 中的 verbose: # verbose:日志显示 # verbose = 0 为不在标准输出流输出日志信息 # verbose = 1 为输出进度条记录 # verbose = 2 为每个epoch输出一行记录 # 3、预测性能 x_test = x[50:100] y_test = y[50:100] y_pred = model.predict(x_test) plt.scatter(x_test,y_test) plt.plot(x_test,y_pred) plt.show() # 4、模型可视化 from keras.utils import plot_model plot_model(model,show_shapes='True') print(model.summary())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。