cheny12的博客

to the end of the world

tensorflow-多元线性模型

     数据见deep learning,该模型为多元输入的线性模型,即z=mx+ny+b的空间平面

#--coding:UTF-8--
import tensorflow as tf
import numpy as np
from sklearn import preprocessing

#读取数据为float32形式//tf.zeros数据类型为tf.float32
x_data=np.loadtxt('./ex3x.dat').astype(np.float32)
y_data=np.loadtxt('./ex3y.dat').astype(np.float32)

#对数据进行预处理标准化
scaler=preprocessing.StandardScaler().fit(x_data)
x_data_standard=scaler.transform(x_data)

#定义变量并初始化为0
W=tf.Variable(tf.zeros([2,1]))
b=tf.Variable(tf.zeros([1,1]))

#W为矩阵,用tf.matmul函数进行矩阵相乘运算
y_=tf.matmul(x_data_standard,W)+b

#定义优化器
optimizer=tf.train.GradientDescentOptimizer(0.01)
#定义损失函数
loss=tf.reduce_mean(tf.square(y_-y_data.reshape(-1,1)))
train=optimizer.minimize(loss)

sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
for step in range(1500):
	sess.run(train)
	if step%100==0:
		print step,sess.run(W).flatten(),sess.run(b).flatten()
#flatten函数将参数展开

运行结果如下:

0 [2115.2822 1094.1765] [6808.2524]
100 [83597.23  15084.638] [296170.16]
200 [99544.86    3148.6218] [334545.28]
300 [105389.125   -2527.0706] [339634.53]
400 [107772.35    -4903.2246] [340309.5]
500 [108755.66   -5886.229] [340398.97]
600 [109161.85    -6292.4053] [340410.75]
700 [109329.64   -6460.213] [340411.9]
800 [109398.984   -6529.5547] [340411.9]
900 [109427.63   -6558.196] [340411.9]
1000 [109439.47    -6570.0293] [340411.9]
1100 [109444.33   -6574.912] [340411.9]
1200 [109446.36   -6576.919] [340411.9]
1300 [109447.18   -6577.736] [340411.9]
1400 [109447.445  -6578.082] [340411.9]

同样整个过程并不像结果展示的那样顺利,首先是数据类型报错的问题,tf.zeros数据类型为float32,而读出来的数据类型为float64,所以矩阵相乘时会报错,附上函数解释:tf.zeros(shape, dtype=tf.float32, name=None)

当没有对x_data进行预处理时,其结果如下

0 [13621140.       21583.605] [6808.2524]
100 [nan nan] [nan]
200 [nan nan] [nan]
300 [nan nan] [nan]
400 [nan nan] [nan]
500 [nan nan] [nan]
600 [nan nan] [nan]
700 [nan nan] [nan]
800 [nan nan] [nan]
900 [nan nan] [nan]
1000 [nan nan] [nan]
1100 [nan nan] [nan]
1200 [nan nan] [nan]
1300 [nan nan] [nan]
1400 [nan nan] [nan]

同样又是一排排的nan,从第一行的13621140可以看出,很大程度上应该就是梯度爆炸导致参数数值过大,超过阈值

0 [1362114.1       2158.3606] [680.82526]
2 [1.16299066e+14 1.67974388e+11] [5.035392e+10]
4 [9.9308346e+21 1.4343421e+19] [4.2997471e+18]
6 [8.4799905e+29 1.2247917e+27] [3.6715757e+26]
8 [          inf 1.0458559e+35] [3.1351772e+34]

通过查看前面输出可以看出的确是由于参数过大导致的nan,由此我们也可以看出数据预处理对于参数优化的重要性,如果不同因素的数量级不在一个层次,那么势必其权重也会有特别大的差别,通过对数据预处理,进行标准化,可以维持参数的稳定性。

阅读更多
版权声明: https://blog.csdn.net/qq_33668920/article/details/79961157
文章标签: tensorflow dl ml
个人分类: machine learning
上一篇tensorflow-一元线性模型
下一篇tensorflow-逻辑回归
想对作者说点什么? 我来说一句

多元线性回归源码最小二乘C#

2009年12月24日 40KB 下载

数学建模多元线性模型的应用

2011年06月07日 302KB 下载

没有更多推荐了,返回首页

关闭
关闭