【深度学习】线性回归基础实例

我在b站上看到深度学习框架Tensorflow学习与应用(8),是一个深度学习线性回归的例子。算是学深度学习的第

一个例子,在此记录。

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

引入这三个库,matplotlib 用来画图的,后面会说到一点点。

这个例子是生成一些随机点(大体依照在x平方这个函数),然后用深度学习方法拟合它。

#使用numpy生成随机数据
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

numpy.linspace用法:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) ,这里就是生成 -0.5 到 0.5之间均匀的

200个数。

np.newzxis 是给生成的数据多加一个维度。举例来看:

>> x = np.arange(3)
>> x
array([0, 1, 2])
>> x.shape
(3,)

>> x[:, np.newaxis]
array([[0],
       [1],
       [2]])

>> x[:, None]
array([[0],
       [1],
       [2]])

>> x[:, np.newaxis].shape
 (3, 1)

冒号处代表了已知数据,再在这个已知数据上加一个维度。

np.random.normal()  

  1. numpy.random.normal(loc=0.0, scale=1.0, size=None)  

参数的意义为:

loc:float 概率分布的均值,对应着整个分布的中心center

scale:float 概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

size:int or tuple of ints

输出的shape,默认为None,只输出一个值

我们更经常会用到np.random.randn(size)所谓标准正太分布(μ=0, σ=1),对应于np.random.normal(loc=0, scale=1, size)

按照正态分布生成噪声,比较科学。在x_data上加上噪声值,也就得到了y_data,也就是分布在x方函数周围的散点。

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

定义两个占位符,[None,1]表示多行,一列,实例化时候数据是多少行这里就是多少行了。注意None大写。

 

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

这里生成一个tensorflow的随机的1行10列的变量,代表权值,然后1行10列的全零变量代表偏置。L1代表第一层。为什么1行10列?因为只有一个输入,我们想构建十个神经元的网络。

 

然后用x*权值+偏置得到第一层的输出。tf.nn.tanh 是激励函数,我理解是平滑化(非线性函数)表示这个输出,具体见这个莫烦的教程吧。

 

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

输出层的定义依然是权值加偏置,这里变成10行1列的随机数,是因为10个神经元,1个输出(后面解释为什么偏置是一个数而不是10行1列)。然后继续x*权值+偏置的方式,再通过激励函数生成predicton预测值。

 

 

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

 

 

用y-预测值的平方均值,再用梯度下降法使它最小。

 

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})
    #获得预测值,只需给定x
    predicton_value = sess.run(prediction,feed_dict={x:x_data})
    #画图
    plt.figure()
    #散点图
    plt.scatter(x_data,y_data)
    plt.plot(x_data,predicton_value,'r-',lw=5)
    plt.show()

x*1行10列的矩阵得到1行10列的矩阵,再乘以第二层10行1列的矩阵会得到1行1列的数,所以输出层偏置是一个数。
 

 

 




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值