Tensorflow入门——利用神经网络实现线性回归的预测(Keras方式实现)

原文链接: https://my.oschina.net/u/4105485/blog/3033638

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、什么是Keras

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

具体可以参考:Keras: 基于 Python 的深度学习库

通过之前的例子 Tensorflow——利用神经网络实现线性回归的预测 我们发现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:tf.keras.model.fit)

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.44764860292732
x= [[12.11375358]] y预测= [[40.489502]] y实际= 41.30630660712863
x= [[26.50665706]] y预测= [[115.927895]] y实际= 118.02048213508458
x= [[23.92639848]] y预测= [[102.40385]] y实际= 104.26770387755393
x= [[28.40950307]] y预测= [[125.90141]] y实际= 128.16265135441537
x= [[4.02130059]] y预测= [[-1.9259634]] y实际= -1.8264678301731045
x= [[24.24050166]] y预测= [[104.05016]] y实际= 105.94187387358106
x= [[29.71602577]] y预测= [[132.74937]] y实际= 135.126417345193
x= [[22.21779693]] y预测= [[93.44843]] y实际= 95.16085765597148
x= [[25.86439061]] y预测= [[112.56156]] y实际= 114.59720195233699

 

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

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

https://github.com/yukiti2007/sample/blob/master/python/tensorflow/wx_b_nn_keras.py

import random

import numpy as np
import tensorflow as tf


def 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, y


def 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

你可能感兴趣的:(Tensorflow入门——利用神经网络实现线性回归的预测(Keras方式实现))