博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tensorflow入门——利用神经网络实现线性回归的预测(Keras方式实现)
阅读量:6950 次
发布时间:2019-06-27

本文共 3007 字,大约阅读时间需要 10 分钟。

hot3.png

一、什么是Keras

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 , , 或者  作为后端运行。

具体可以参考:

通过之前的例子  我们发现tensorflow的入门门槛还是比较高的

而且个人感觉其对于神经网络中各个层的定义不是很明确,是通过定义层到层之间的参数来确定的

而Keras就很明确的定义了层的概念,反过来层与层之间的参数反倒是用户不需要关心的对象

所以构建神经网络的方法对于普通开发者来说,相对tensorflow,Keras更易上手

而Keras也是tensorflow官方在tensorflow2.0开始墙裂推荐使用的

 

二、将之前的例子改成Keras实现

删除tf.placeholder占位、tf.Variable变量、模型、损失函数、优化器的定义(其实就是将所以的都删除了^_^)

使用tf.keras构建模型

这里直接使用tf.keras.Sequential来构建一个最简单的线性模型

model = tf.keras.Sequential()

向模型中添加层两个全连接层作为隐藏层

model.add(tf.keras.layers.Dense(10))model.add(tf.keras.layers.Dense(10))

再添加一个全连接层作为输出层

model.add(tf.keras.layers.Dense(1))

配置模型的损失函数和优化器,依然使用AdamOptimizer优化器'adam',损失函数依然是方差'mse'

(注意:在tensorflow1.13中可以写成optimizer=tf.train.AdamOptimizer(0.001),但是tensorflow2.0中必须写成optimizer='adam')

model.compile(optimizer='adam',              loss='mse')

通过model.fit开始训练,依然训练5000次

这里需要将x和y转化为二维的numpy矩阵(model.fit的输入支持的参数可以查看官网API:)

for _ in range(5000):    x_train, y_train = create_data(True)    x_train = np.array(x_train, ndmin=2)    y_train = np.array(y_train, ndmin=2)    model.fit(x_train, y_train)

使用训练好的模型进行预测(依然需要将x转化为二维的numpy矩阵)

for _ in range(10):    x_data, y_data = create_data(False)    x_data = np.array(x_data, ndmin=2)    prediction_value = model.predict(x_data)    print("x=", x_data, "y预测=", prediction_value, "y实际=", y_data)

预测结果为:

x= [[16.8307033]] y预测= [[65.21274]] y实际= 66.44764860292732x= [[12.11375358]] y预测= [[40.489502]] y实际= 41.30630660712863x= [[26.50665706]] y预测= [[115.927895]] y实际= 118.02048213508458x= [[23.92639848]] y预测= [[102.40385]] y实际= 104.26770387755393x= [[28.40950307]] y预测= [[125.90141]] y实际= 128.16265135441537x= [[4.02130059]] y预测= [[-1.9259634]] y实际= -1.8264678301731045x= [[24.24050166]] y预测= [[104.05016]] y实际= 105.94187387358106x= [[29.71602577]] y预测= [[132.74937]] y实际= 135.126417345193x= [[22.21779693]] y预测= [[93.44843]] y实际= 95.16085765597148x= [[25.86439061]] y预测= [[112.56156]] y实际= 114.59720195233699

 

====================================================

完整代码如下,在python3.6.8、tensorflow1.13/tensorflow2.0.0-alpha0 环境下成功运行

import randomimport numpy as npimport tensorflow as tfdef create_data(for_train=False):    w = 5.33    b = -23.26    x = random.random() * 30    y = w * x + b    if for_train:        noise = (random.random() - 0.5) * 10        y += noise    return x, ydef run():    model = tf.keras.Sequential()    model.add(tf.keras.layers.Dense(10))    model.add(tf.keras.layers.Dense(10))    model.add(tf.keras.layers.Dense(1))    model.compile(optimizer='adam',                  loss='mse')    for _ in range(5000):        x_train, y_train = create_data(True)        x_train = np.array(x_train, ndmin=2)        y_train = np.array(y_train, ndmin=2)        model.fit(x_train, y_train)    for _ in range(10):        x_data, y_data = create_data(False)        x_data = np.array(x_data, ndmin=2)        prediction_value = model.predict(x_data)        print("x=", x_data, "y预测=", prediction_value, "y实际=", y_data)if __name__ == "__main__":    run()

转载于:https://my.oschina.net/u/4105485/blog/3033638

你可能感兴趣的文章
sql 事物以及回滚
查看>>
drawrect&layoutsubviews
查看>>
程序中如何获取Android的Root权限
查看>>
算法策略的总结
查看>>
[转]Core Audio
查看>>
UIScrollView的属性总结
查看>>
unicode 和utf-8,GBK编码
查看>>
php 设置模式 单元素模式(单例模式或单件模式)
查看>>
Linux下升级python版本
查看>>
正则表达式全集
查看>>
iOS开发小技巧--修改按钮内部图片和文字之间的间距(xib)
查看>>
[转]原始套接字编程
查看>>
经典海量jQuery插件
查看>>
如何在博客园随笔中增加章节导航
查看>>
eclipse中的.project 和 .classpath文件的具体作用
查看>>
ubuntu 绑定固定ip
查看>>
(转)linux下fork的运行机制
查看>>
vue-cli搭建及项目目录结构
查看>>
springboot秒杀课程学习整理1-5
查看>>
css中display:none与visibility: hidden的区别
查看>>