TensorFlow 简单回归分析

TensorFlow 简单回归分析

概述

之前一直听说TensorFlow很好用,至今到现在一直没有实际的使用的(之前一直用的sklearn),今天B站上看了一个教学视频跟着上课的老师敲了下面的代码,代码的功能实现了简单的回归分析。

说明

代码构建了包括输入层、输出层和一层隐藏层的神经网络,该神经网络的激活函数是tanh函数,该函数表达式为:

t a n h ( x ) = s i n h ( x ) / c o n h ( x ) tanh(x)=sinh(x)/conh(x) tanh(x)=sinh(x)/conh(x)
使用Numpy生成了样本数据,并使用matplotlib.pyplot绘制了预测效果。

代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

x_data=np.linspace(-0.5,0.5,200)[:,np.newaxis]
noise=np.random.normal(0,0.02,x_data.shape)
y_data=np.square(x_data)+noise

#定义两个placeholder
x=tf.placeholder(tf.float32,[None,1])
y=tf.placeholder(tf.float32,[None,1])

#定义一个神经网络的中间层
Weight_L1=tf.Variable(tf.random_normal([1,10]))
biases_L1=tf.Variable(tf.zeros([1,10]))
Wx_plus_b_L1=tf.matmul(x,Weight_L1)+biases_L1
L1=tf.nn.tanh(Wx_plus_b_L1)

#定义神经网络的输出层
Weight_L2=tf.Variable(tf.random_normal([10,1]))
biases_L2=tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2=tf.matmul(L1,Weight_L2)+biases_L2
prediction=tf.nn.tanh(Wx_plus_b_L2)

#二次代价函数
loss=tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

with tf.Session() as sess:
    #变量初始化
    sess.run(tf.global_variables_initializer())
    for _ in range(2000):
        sess.run(train_step,feed_dict={x:x_data,y:y_data})
    prediction_value=sess.run(prediction,feed_dict={x:x_data})
    plt.figure()
    plt.scatter(x_data,y_data)
    plt.plot(x_data,prediction_value,'r-',lw=5)
    plt.show()

代码解释

import导入tensorflow、numpy和matplotlib.pyplot工具包;numpy的linspace生成样本数据的X坐标(这里生成的X坐标是二维向量),随后生成使用random对象生成噪点数据,最后使用square对象生成样本数据的测量值,所以目标函数是一个二次函数。
接下来是tensorflow的相关操作:

tensorflow.placeholder():起占位符作用,在tensorflow中类似于函数参数,在执行的时候再赋具体的值。
参数含义:
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型;
shape:数据形状。默认是None,就是一维值,也可以是多维,[None, 1]表示列是1,行不定;
name:名称。

tensorflow.Variable():变量(Variable)是特殊的张量(Tensor),它的值可以是一个任何类型和形状的张量,代码中创建了pre-activation函数的权重和截距。

tensorflow.matmul():这是一个乘积对象,这个对象中使用到了前面定义的占位符和变量。

tensorflow.nn.tanh():定义激活函数,将定义好的pre-activation对象作为输入。

tensorflow.reduce_mean():求张量的平均值,对象名的前缀是reduce_的有“对矩阵降维”的含义,下划线后面的部分就是降维的方式,代码中使用该对象构建loss函数。

tensorflow.train.GradientDescentOptimizer(0.1).minimize(loss):构建目标的求解方法,代码中使用了梯度下降法,步长为0.1。
with tf.Session() as sess:使用with方法可以省略对Session的关闭操作。
Session.run():这个对象执行一步 TensorFlow 运算,通过运行必要的图块来执行每一个操作。

最后,使用matplot.pyplot的scatter对象和plot对象分别绘制样本数据散点图和预测数据曲线图。

注:本博客中仍有非常多的细节没有说明,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值