keras非线性回归的实现和小结

Keras支持序列化模型和函数化模型,且二者具有一定数量的公有属性(attribute)和方法(method)。其中的公有属性包括layers、inputs、outputs,能够以Python列表的形式返回模型信息 [9] :

keras有非常简易的使用“套路”:
获取数据->创建模型->添加层(模型搭建)->连接层(编译模型)->训练模型->得出结果

一、 获取数据

import tensorflow as tf
import keras
from keras.optimizers import SGD
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#Sequential 按顺序构成的模型
from keras.models import Sequential
#Dense 全连接层
from keras.layers import Dense,Activation

#使用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)

注意此处要加上噪声,否则模型的意义何在!当然,如果是现实中所的数据,本身就会带有噪声。
keras非线性回归的实现和小结_第1张图片

keras非线性回归的实现和小结_第2张图片

二、 创建模型

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

三、 添加层(模型搭建)

#在模型中添加一个全连接层Dense
#1-10-1(各层神经元数)
#输入层一个神经元,中间层10个,输出层一个。
#输入数据样本200个,列成一个200行1列的矩阵,乘以w权值矩阵,再加偏置矩阵b,经过tanh激活函数产生一个输出。输出值再进入输出层计算,同理可得最后的输出(即prediction)。
#经过迭代以后,可以得到最优方案。
model.add(Dense(input_dim=1,units=10)) #units 输出值的维度, input_dim 输入值的维度,此层即输入一个x,输出10个值
model.add(Activation('tanh'))

#添加隐藏层
#上一层的输出是下一层的输入,此处默认输入层为10个神经元,即输入上一层中输出的10个值,输出1个值。
model.add(Dense(units=1))
model.add(Activation('tanh'))

关于神经元和激活函数等的总结请参考:https://blog.csdn.net/weixin_41445387/article/details/100523814

四、 连接层

#sgd:Stochastic gradient descent,随机梯度下降法
#mse:Mean Squared Error,均方误差
#定义优化算法
sgd = SGD(lr=0.3)
model.compile(optimizer=sgd,loss='mse')

五、 训练模型并得到结果

#训练模型
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()
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-')

keras非线性回归的实现和小结_第3张图片

注解:我的理解是线性回归和非线性回归都归结于y=ax+b这个式子,上面的w即相当于a,只不过在线性回归和非线性回归中的区别的是前者的a和b都是一个值,后者的a和b是矩阵。

关于引入激活函数的两种方法

#正如上面所展示的代码,这是第一种,在创建层以后在他的下面引入
model.add(Dense(input_dim=1,units=10))
model.add(Activation('tanh'))
#也可以在创建dense层时直接激活
model.add(Dense(input_dim=1,units=10,activation='tanh'))#鼠标点击到参数上,按住shift+tab键可查看相关参数信息。

属性与方法

关于keras详细的属性和方法请访问:https://baike.baidu.com/item/Keras/22792516?fr=aladdin

激活函数:https://keras-cn.readthedocs.io/en/latest/legacy/other/activations/softmax

softplus
softsign
relu
tanh
sigmoid
hard_sigmoid
linear

优化器:https://keras-cn.readthedocs.io/en/latest/legacy/other/optimizers/

SGD
RMSprop
Adagrad
Adadelta
Adam
Adamax
Nadam

损失函数:https://keras-cn.readthedocs.io/en/latest/legacy/other/objectives/

mean_squared_error或mse
mean_absolute_error或mae
mean_absolute_percentage_error或mape
mean_squared_logarithmic_error或msle
squared_hinge
hinge
binary_crossentropy(亦称作对数损失,logloss)
categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列
sparse_categorical_crossentrop:如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)
kullback_leibler_divergence:从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异.
poisson:即(predictions - targets * log(predictions))的均值
cosine_proximity:即预测值与真实标签的余弦距离平均值的相反数

评估函数:https://keras-cn.readthedocs.io/en/latest/legacy/other/metrics/

binary_accuracy:对二分类问题,计算在所有预测值上的平均正确率
categorical_accuracy:对多分类问题,计算再所有预测值上的平均正确率
sparse_categorical_accuracy:与categorical_accuracy相同,在对稀疏的目标值预测时有用
top_k_categorical_accracy: 计算top-k正确率,当预测值的前k个值中存在目标类别即认为预测正确
mean_squared_error:计算预测值与真值的均方差
mean_absolute_error:计算预测值与真值的平均绝对误差
mean_absolute_percentage_error:计算预测值与真值的平均绝对误差率
mean_squared_logarithmic_error:计算预测值与真值的平均指数误差
hinge:计算预测值与真值的hinge loss
squared_hinge:计算预测值与真值的平方hinge loss
categorical_crossentropy:计算预测值与真值的多类交叉熵(输入值为二值矩阵,而不是向量)
sparse_categorical_crossentropy:与多类交叉熵相同,适用于稀疏情况
binary_crossentropy:计算预测值与真值的交叉熵
poisson:计算预测值与真值的泊松函数值
cosine_proximity:计算预测值与真值的余弦相似性
matthews_correlation:计算预测值与真值的马氏距离
precision:计算精确度,注意percision跟accuracy是不同的。percision用于评价多标签分类中有多少个选中的项是正确的
recall:召回率,计算多标签分类中有多少正确的项被选中
fbeta_score:计算F值,即召回率与准确率的加权调和平均,该函数在多标签分类(一个样本有多个标签)时有用,如果只使用准确率作为度量,模型只要把所有输入分类为"所有类别"就可以获得完美的准确率,为了避免这种情况,度量指标应该对错误的选择进行惩罚. F-beta分值(0到1之间)通过准确率和召回率的加权调和平均来更好的度量.当beta为1时,该指标等价于F-measure,beta<1时,模型选对正确的标签更加重要,而beta>1时,模型对选错标签有更大的惩罚.
fmeasure:计算f-measure,即percision和recall的调和平均

参考文章链接:https://blog.csdn.net/lusongno1/article/details/88931718

你可能感兴趣的:(机器学习,非线性回归,keras,机器学习,深度学习)