首先我们要试验的是 人体脂肪fat和年龄age以及体重weight之间的关系,我们的目标就是得到一个最优化的平面来表示三者之间的关系:

TensorFlow的程序如下:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
W = tf.Variable(tf.zeros([2, 1], name="weight_age"))
b = tf.Variable(0.0, name="bias") def inference(X):
return tf.matmul(X, W) + b def loss(X, Y):
Y_predicted = inference(X)
return tf.reduce_sum(tf.square(Y-Y_predicted)) def inputs():
weight_age = [[84,46],[93,20],[65,52],[70,30],[76,57],[69,25],[63,28],[72,36],[79,57],[75,44]
,[27,24],[89,31],[65,52],[57,23],[59,60],[69,48],[60,34],[79,51],[75,50],[82,34]
,[59,46],[67,23],[85,37],[55,40],[63,30]]
blood_fat_content = [354,190,405,263,451,302,288,385,402,365,209,290,346
,254,395,434,220,374,308,220,311,181,274,303,244]
return tf.to_float(weight_age), tf.to_float(blood_fat_content) def train(total_loss):
learning_rate = 0.00000001
return tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss) def evaluate(sess, X, Y):
print sess.run(inference([[80., 25.]]))
print sess.run(inference([[65., 25.]])) init = tf.global_variables_initializer() with tf.Session() as sess:
sess.run(init)
X, Y = inputs()
total_loss = loss(X, Y)
print "The total_loss:",total_loss
train_op = train(total_loss)
training_steps = 10000
for step in range(training_steps):
sess.run([train_op])
if step % 1000 == 0:
print "loss:", sess.run([total_loss])
evaluate(sess, X, Y)
   print 'W is:',W.eval()
   print 'b is:',b.eval()
sess.close()

程序中的数据散点图如下:

通过TensorFlow得到的最终的W的取值和b的取值如下所示:

现在我们将得到的W的数据和b的数据绘制平面(MATLAB程序如下):

% TensorFlow Data Plot Script For Matlab%
weight_age = [[84,46];[93,20];[65,52];[70,30];[76,57];[69,25];[63,28];[72,36];
[79,57];[75,44];[27,24];[89,31];[65,52];[57,23];[59,60];[69,48];[60,34];
[79,51];[75,50];[82,34];[59,46];[67,23];[85,37];[55,40];[63,30]]; % 25*2
weight = weight_age(:,1); %25*1
age = weight_age(:,2); %25*1
blood_fat_content = [354,190,405,263,451,302,288,385,402,365,209,290,346,254,395,434,220,374,308,220,311,181,274,303,244]; % 1*25
Fat = zeros(max(weight),max(age));
for i=1:25
Fat(weight(i),age(i)) = blood_fat_content(i);
end
figure,plot3(weight,age,blood_fat_content','.')
hold on % 平面拟合
A = 3.23492765;
B = 1.94148386;
C = 1.15458;
[x,y] = meshgrid(0:1:90);
z = A*x+B*y+C; mesh(z)

结果图如下所示:

注:这里在实验的过程中,碰到一些问题,当我把learning_rate设置为0.000001时,未能得到相应的结果,total_loss=nan,也就是说梯度下降法的过程没有收敛,导致无法得到相应的数据结果!(还需要注意你的是python3还是Python2,这里的print 需要修改一下哦!)关于参数设定的学习还是慢慢来吧~

简单的线性回归问题-TensorFlow+MATLAB·的更多相关文章

  1. 【学习笔记】tensorflow实现一个简单的线性回归

    目录 准备知识 Tensorflow运算API 梯度下降API 简单的线性回归的实现 建立事件文件 变量作用域 增加变量显示 模型的保存与加载 自定义命令行参数 准备知识 Tensorflow运算AP ...

  2. 用Tensorflow完成简单的线性回归模型

    思路:在数据上选择一条直线y=Wx+b,在这条直线上附件随机生成一些数据点如下图,让TensorFlow建立回归模型,去学习什么样的W和b能更好去拟合这些数据点. 1)随机生成1000个数据点,围绕在 ...

  3. TensorFlow——热身运动:简单的线性回归

    过程: 先用numpy建立100个数据点,再用梯度下滑工具来拟合,得到完美的回归线. # _*_coding:utf-8_*_ import tensorflow as tf import numpy ...

  4. 机器学习笔记(一)—— 线性回归问题与Matlab求解

    给你多组数据集,例如给你很多房子的面积.房子距离市中心的距离.房子的价格,然后再给你一组面积. 距离,让你预测房价.这类问题称为回归问题. 回归问题(Regression) 是给定多个自变量.一个因变 ...

  5. pytorch(04)简单的线性回归

    线性回归 线性回归是分析一个变量与另外一个变量之间关系的方法 因变量:y 自变量:x 关系:线性 y = wx+b 分析:求解w,b 求解步骤: 确定模型,Model:y = wx+b 选择损失函数, ...

  6. 深度学习_1_Tensorflow_1

    # 深度学习 # 图像识别,自然语言处理 # 机器学习 深度学习 # 分类:神经网络(简单) 神经网络(深度) # 回归 图像:卷积神经网络 # 自然语言处理:循环神经网络 # cpu:运行操作系统, ...

  7. TensorFlow从0到1之TensorFlow实现简单线性回归(15)

    本节将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bos ...

  8. TensorFlow简单线性回归

    TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...

  9. [tensorflow] 线性回归模型实现

    在这一篇博客中大概讲一下用tensorflow如何实现一个简单的线性回归模型,其中就可能涉及到一些tensorflow的基本概念和操作,然后因为我只是入门了点tensorflow,所以我只能对部分代码 ...

随机推荐

  1. spring annotation功能备注

      @Autowired @Autowired 注释可以在 setter 方法中被用于自动连接 bean.以type方式进行匹配. 一个构造函数 @Autowired 说明当创建 bean 时,即使在 ...

  2. 放弃FreeMark?

    JAVA项目FreeMark 生产静态页面   a)    弊端                 i.          依赖后台工程师拼装页面,不利于前端.后台工作完全解耦. ii.         ...

  3. Java IO流之随机读写流RandomAccessFile

    随机读写流RandomAccessFile 简介 此类的实例支持对随机访问文件的**读取和写入**. 随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组. 存在指向该隐含数组的光标或索引 ...

  4. Java之【线程通信】--标志位练习

    * 写两个线程,一个线程打印1-52,另一个线程答应字母A-Z. * 打印顺序为12A34B56C--5152Z.通过使用线程之间的通信协调关系. 注:分别给两个对象构造一个对象o,数字每打印两个或字 ...

  5. shared_ptr注意点

    1.原始指针不能直接使用赋值运算符对shared_ptr进行赋值运算 std::shared_ptr<int> p; p= ); //error p.reset(); //success ...

  6. JS问题笔记——模拟Jq底层实现工厂模式

    <script type="text/javascript"> (function (window,undefined){ function _$(arguments) ...

  7. 【转载】SQL Server行转列,列转行

    行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...

  8. .NET中使用Redis总结

    注:关于如何在windows,linux下配置redis,详见这篇文章:) 启动遇到问题 使用命令[redis-server.exe redis.windows.conf],启动redis 服务[如果 ...

  9. jeecg关闭当前iframe

    关闭当前iframe function closeDialog(){ frameElement.api.close();//本方法也行 //或者下面的方式 var win = frameElement ...

  10. 实现自己的.NET Core配置Provider之Yaml

    YAML是一种更适合人阅读的文件格式,很多大型的项目像Ruby on Rails都选择YAML作为配置文件的格式.如果项目的配置很少,用JSON或YAML没有多大差别.看看rails项目中的配置文件, ...