刚刚开始学习keras,就在这里记录一下学习过程啦。
本文为使用keras搭建回归神经网络,对numpy的使用也有了一定的了解。
keras文档:https://keras.io/zh/
numpy文档:https://www.numpy.org.cn/index.html
莫烦python bilibili链接:https://space.bilibili.com/243821484/video
1、numpy.random.seed(num):
每次使用相同的num值,可以使得之后随即产生的数列是相同的;
若是不设置该值,则每次生成的随机数因时间的差异而不同。
2、numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
在指定的间隔内返回均匀间隔的数字;返回num均匀分布的样本,在[start, stop]之间。
3、numpy.random.shuffle(X)
打乱样本的顺序。
4、numpy.random.normal(loc=0.0, scale=1.0, size=None)
loc:概率分布的均值。
scale:概率分布的标准差(对应于分布的宽度,scale越大越矮胖,越小越瘦高)。
size:输出的shape,默认为None,只输出一个值。
1、plt.scatter(X,Y)
画出散点图
2、plt.plot(X,Y)
画出线图
3、plt.show()
显示所画的图
import numpy as np
np.random.seed(666)
from keras.models import Sequential #按顺序建立
from keras.layers import Dense #全连接层
import matplotlib.pyplot as plt #可视化的模块
X=np.linspace(-1,1,200) #在(-1,1)之间创建共200个数据
np.random.shuffle(X)
Y=0.5*X + 2 + np.random.normal(0,0.05,(200,)) #weights为0.5 biases为2
plt.scatter(X,Y)
plt.show()
设置训练集和测试集的个数:
X_train,Y_train = X[:160],Y[:160] #前160个数
X_test,Y_test=X[160:],Y[160:] #后40个数
Dense全连接层:
第一层需要定义输入;第二层则将第一层的输出作为输入
model=Sequential()
model.add(Dense(output_dim=1,input_dim=1)) #x和y的dim都是1
损失函数loss function & 优化器optimizer:
loss=‘mse’:mse即mean_squared_error,意为均方误差,也称标准差,可以反映一个数据集的离散程度。
optimizer=‘sgd’:使用随机梯度下降作为优化方法。
model.compile(loss='mse',optimizer='sgd')
训练:
print('training begin')
for step in range(301):
cost=model.train_on_batch(X_train,Y_train)
if step%100==0:
print('train cost:',cost) #每100次输出一下cost
测试:
print('\ntesting begin')
cost=model.evaluate(X_test,Y_test,batch_size=40)
print('test cost:',cost)
W,b=model.layers[0].get_weights() #get_weight返回这weights和biases这两个参数
print('weights=',W,'\nbiases=',b)
显示结果:
Y_pred = model.predict(X_test)
plt.scatter(X_test,Y_test)
plt.plot(X_test,Y_pred)
plt.show()