机器学习:tensorflow实现Andrew Ng课程中的线性回归问题 machine learning ex1

一般,线性回归问题是机器学习入门时必讲的一个问题,也是我们去认识神经网络的第一步,完成了Adrew Ng的课程之后,想着是用tensorflow对课程中的各个课程作业进行代码实现。毕竟python近期很流行,现在用的还比较生,所以有不对的地方,恳请大家指正。

所有的神经网络程序都是分为四部来进行的,加载并整理数据,计算损耗并修改参数,判断是否满足条件,预测模型效果。

加载并整理数据包括对原始数据进行加载,一般在matlab语言中,加载数据比较简单,或者可以这么说,对于初学者而言,matlab是最容易上手,也是最简单的机器学习代码学习工具。加载数据时matlab是要一句代码load('filename'),就搞定了,用python来写就要根据文件类型来制定相应的函数了,python加载文件的方式有很多,这里我介绍的是numpy库下的loadXXX函数,但是,该函数默认的分隔符是空格,如果文件中使用的是其他分隔符,就将delimiter属性更改即可,在后续的代码大家会看到。除了要加载数据,还要整理数据,比如,将自变量与因变量分离,归一化等等操作,在这里要注意的是,python的所引致是从零开始,而matlab是从一开始,所以,代码要有所区别,另外,如果表示一列的值,matlab逗号之后是可以直接写出列号的,但是,python必须要完成学出n:m,否则,系统无法得知该矩阵对应的列数是多少,比如data(:,0:1),这句话表示将矩阵data的第一列拿出来,0:1在python中是不包括第1列的。所有原始数据生成都是用numpy来完成的。

计算损耗并修改参数:这里我们要写先定义好我们计算损耗时的参数,比如:系数theta,以及用theta运算得到的预测值h,这里theta的初始化是要用到tensorflow里的函数的,初始化参数前一定要加tf.Variable(),否则,系统得不到相关的值。tensorflow的matmul矩阵乘法函数的两个参数使用的都是float32类型的,如果原始数据的数据类型不是float32(一般默认的都不是),要在数据前加np.float32()函数来转化类型。使用tf产生的数据默认是float32。如果计算损耗时,运算结果全都是nan,那说明学习速率选的太大了,应适当减小。

判断是否满足条件:取决于代码书写人员的要求,一般都是固定迭代多少次或者检查损耗降低当了某一个值不变化之后,跳出程序,这个根据自己的情况而定。

最后,检测自己的参数结果是否合理。

但是本次因为程序比较简单,没有错最后一步测试,而是将结果与我已经写好的matlab程序运行结果进行对比,结果相同。

当时忘记写sess.run(init),错误还弄了半天,因为tensorflow是计算图方式,所以,需要对所有的参数进行初始化,sess.run (init)就是对所有的计算图变量进行初始化。

import tensorflow as tf
import numpy as np

data = np.loadtxt('ex1data1.txt', delimiter = ',')
data = np.array(data)
[m,n] = data.shape;

X = data[:,0:1]
y = np.float32(data[:,1:2])
X = np.float32(np.hstack((np.ones((m,1)), X)))

theta = tf.Variable(tf.zeros([2,1]))
h = tf.matmul(X, theta)

loss = tf.reduce_sum(tf.square(h-y))/(2*m)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)


init = tf.initialize_all_variables()
with tf.Session() as sess:
	sess.run(init)
	for step in xrange(0, 1500):
		sess.run(train)
		print step, ':' , sess.run(theta)
	print sess.run(loss)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值