Keras上基于TensorFlow实现简单线性回归模型
来源:互联网 发布:查看磁盘空间 linux 编辑:程序博客网 时间:2024/06/01 09:10
神经网络可以用来模拟回归问题。
首先回归问题是什么,回归问题通常是用来预测一个值,如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。一个比较常见的回归算法是线性回归算法(LR)。另外,回归分析用在神经网络上,其最上层是不需要加上softmax函数的,而是直接对前一层累加即可。回强调内容归是对真实值的一种逼近预测。
这里我们就是用一条线段来对一些连续的数据进行拟合,进而我们可以通过这个曲线预测出新的输出值。
首先是数据图:
我们需要做的就是将其用一条直线将其取代。类似下图:
一、根据代码对其进行详细解读
1.导入的模块
导入本例子需要的模块,numpy、Matplotlib、kears.models和keras.models模块。Sequential()是多个网络层的线性堆叠。可以直接在其内部加入各个网络层或者通过 add()函数一个一个将网络层加入其中。Dense是全连接神经网络层。
model.add(Dense(64, input_dim=64, W_regularizer=l2(0.01), activity_regularizer=activity_l2(0.01)))
Dense层包括output_dim(输出维度)、input_dim(输入维度)、activation(激活函数)、weights(权值)、W_regularizer(施加在权值上的正则项)、b_regularizer(施加在偏置向量上的正则项)、activity_regularizer(施加在输出上的正则项)、W_constraints(施加在权值上的约束项)、b_constraints、bias(布尔值,是否包含偏置向量)这些参数。
2.数据的生成
利用numpy中的linspace()函数生成200个-1~~1之间的等差数列X,然后根据线性函数生成Y,并对Y添加噪音。这样就得到了数据,下面我们需要对数据进行分类分成两类一类是训练集一类是测试集。我们分配前160为训练集,后40为测试集。
3.建立模型
因为回归问题比较简单我们只需要一个层就可以了。
首先我们用Sequential建立一个模型,然后向其中添加Dense全连接神经层。参数这里是一个是输入数据的维度,另一个units代表神经元数,即输出单元数。如果需要添加下一个神经层的时候,不用再定义输入的纬度,因为它默认就把前一层的输出作为当前层的输入。在这个简单的例子里,只需要一层就够了(这是基于TensorFlow,如果是Theano,则需要将参数units换为output_dim)。
4.编译模型
model.compile()来编译和激活模型,这里我们用的损失函数是mse均方误差;优化器用的是sgd随机梯度下降。
compile(self, optimizer, loss, metrics=[], loss_weights=None, sample_weight_mode=None)
本函数编译模型以供训练,参数有
optimizer:优化器,为预定义优化器名或优化器对象,参考优化器
loss:目标函数,为预定义损失函数名或一个目标函数,参考目标函数
metrics:列表,包含评估模型在训练和测试时的性能的指标,典型用法是 metrics=[‘accuracy’] 如果
Keras中文文档
要在多输出模型中为不同的输出指定不同的指标,可像该参数传递一个字典,例如 metrics=
{‘ouput_a’: ‘accuracy’}
sample_weight_mode:如果你需要按时间步为样本赋权(2D权矩阵),将该值设为“temporal”。
默认为“None”,代表按样本赋权(1D权)。如果模型有多个输出,可以向该参数传入指
定sample_weight_mode的字典或列表。在下面 fit 函数的解释中有相关的参考内容。
kwargs:使用TensorFlow作为后端请忽略该参数,若使用Theano作为后端,kwargs的值将会传递
给 K.function
5.训练模型
训练的时候用 model.train_on_batch 一批一批的训练 X_train, Y_train。默认的返回值是 cost,每100步输出一下结果。
train_on_batch(self, x, y, class_weight=None, sample_weight=None)
本函数在一个batch的数据上进行一次参数更新
函数返回训练误差的标量值或标量值的list,与evaluate的情形相同。
6.验证模型
用到的函数是 model.evaluate,输入测试集的x和y,输出 cost,weights 和 biases。其中 weights 和 biases 是取在模型的第一层 model.layers[0] 学习到的参数。
evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)
本函数按batch计算在某些输入数据上模型的误差,其参数有:
x:输入数据,与 fit 一样,是numpy array或numpy array的list
y:标签,numpy array
batch_size:整数,含义同 fit 的同名参数
verbose:含义同 fit 的同名参数,但只能取0或1
sample_weight:numpy array,含义同 fit 的同名参数
本函数返回一个测试误差的标量值(如果模型没有其他评价指标),或一个标量的list(如果模型还有
其他的评价指标)。
二、完整代码
import numpy as npnp.random.seed(1337)from keras.models import Sequentialfrom keras.layers import Denseimport matplotlib.pyplot as plt/*创建数据集*/X=np.linspace(-1,1,200)np.random.shuffle(X)Y=0.5*X+2+np.random.normal(0,0.05,(200,))/*可视化*/plt.scatter(X,Y)plt.show()X_train,Y_train=X[:160],Y[:160]X_test,Y_test=X[160:],Y[160:]/*建立神经网络模型*/model=Sequential()model.add(Dense(input_dim=1,units=1))/*编译,选定loss函数和优化器*/model.compile(loss='mse',optimizer='sgd')/*训练过程*/print('Training--------------')for step in range(501): cost=model.train_on_batch(X_train,Y_train) if step%100==0: print('train_cost: ',cost)/*测试过程*/print('\nTesting--------------')cost=model.evaluate(X_test,Y_test,batch_size=40)print('test cost:',cost)W, b=model.layers[0].get_weights()print('weight= ',W,'\nbiases=',b)/*结果的可视化*/Y_pred=model.predict(X_test)plt.scatter(X_test,Y_test)plt.plot(X_test,Y_pred)plt.show()
- Keras上基于TensorFlow实现简单线性回归模型
- Keras上实现简单线性回归模型
- 基于tensorflow的线性回归模型
- TensorFlow 实现一元线性回归模型
- TensorFlow学习笔记(二):TensorFlow实现线性回归模型
- TensorFlow上实现Softmax回归模型
- tensorflow 实现线性回归
- Tensorflow实现线性回归
- Tensorflow实现线性回归
- TensorFlow实现线性回归
- 学习TensorFlow,线性回归模型
- 1.TensorFlow初识 TF实现线性回归模型
- 【实践】基于TensorFlow的线性回归算法实现
- 基于Tensorflow实现基本的线性回归(Linear regression)
- Keras基于TensorFlow实现的简单分类问题
- 线性回归、梯度下降以及运用TensorFlow进行简单实现
- 利用tensorflow 一步一步实现一个简单神经网络,线性回归
- 使用TensorFlow实现简单的线性回归(LinearRegression)
- ubuntu环境下python3.5安装pyltp
- [DevExpress使用随笔]之预览repx报表
- Redis持久化
- 如何关闭Linux的某个开机自启动服务
- Glibc-2.18编译
- Keras上基于TensorFlow实现简单线性回归模型
- Python 类的内置属性
- android4.4动态显示隐藏statusbar和禁止下拉
- synchronized
- group_concat函数被截断问题
- ElasticSearch-SQL 5.5.2 安装及配置
- mybatis中的#和$的区别
- EBS中RTF报表Excel格式输出字段长度不正确的解决办法
- 根据数组某一项的某个键,删除数组的这一项