TensorFlow实现创建分类器


Posted in Python onFebruary 06, 2018

本文实例为大家分享了TensorFlow实现创建分类器的具体代码,供大家参考,具体内容如下

创建一个iris数据集的分类器。

加载样本数据集,实现一个简单的二值分类器来预测一朵花是否为山鸢尾。iris数据集有三类花,但这里仅预测是否是山鸢尾。导入iris数据集和工具库,相应地对原数据集进行转换。

# Combining Everything Together
#----------------------------------
# This file will perform binary classification on the
# iris dataset. We will only predict if a flower is
# I.setosa or not.
#
# We will create a simple binary classifier by creating a line
# and running everything through a sigmoid to get a binary predictor.
# The two features we will use are pedal length and pedal width.
#
# We will use batch training, but this can be easily
# adapted to stochastic training.

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()

# 导入iris数据集
# 根据目标数据是否为山鸢尾将其转换成1或者0。
# 由于iris数据集将山鸢尾标记为0,我们将其从0置为1,同时把其他物种标记为0。
# 本次训练只使用两种特征:花瓣长度和花瓣宽度,这两个特征在x-value的第三列和第四列
# iris.target = {0, 1, 2}, where '0' is setosa
# iris.data ~ [sepal.width, sepal.length, pedal.width, pedal.length]
iris = datasets.load_iris()
binary_target = np.array([1. if x==0 else 0. for x in iris.target])
iris_2d = np.array([[x[2], x[3]] for x in iris.data])

# 声明批量训练大小
batch_size = 20

# 初始化计算图
sess = tf.Session()

# 声明数据占位符
x1_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)
x2_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)

# 声明模型变量
# Create variables A and b (0 = x1 - A*x2 + b)
A = tf.Variable(tf.random_normal(shape=[1, 1]))
b = tf.Variable(tf.random_normal(shape=[1, 1]))

# 定义线性模型:
# 如果找到的数据点在直线以上,则将数据点代入x2-x1*A-b计算出的结果大于0;
# 同理找到的数据点在直线以下,则将数据点代入x2-x1*A-b计算出的结果小于0。
# x1 - A*x2 + b
my_mult = tf.matmul(x2_data, A)
my_add = tf.add(my_mult, b)
my_output = tf.subtract(x1_data, my_add)

# 增加TensorFlow的sigmoid交叉熵损失函数(cross entropy)
xentropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=my_output, labels=y_target)

# 声明优化器方法
my_opt = tf.train.GradientDescentOptimizer(0.05)
train_step = my_opt.minimize(xentropy)

# 创建一个变量初始化操作
init = tf.global_variables_initializer()
sess.run(init)

# 运行迭代1000次
for i in range(1000):
  rand_index = np.random.choice(len(iris_2d), size=batch_size)
  # rand_x = np.transpose([iris_2d[rand_index]])
  # 传入三种数据:花瓣长度、花瓣宽度和目标变量
  rand_x = iris_2d[rand_index]
  rand_x1 = np.array([[x[0]] for x in rand_x])
  rand_x2 = np.array([[x[1]] for x in rand_x])
  #rand_y = np.transpose([binary_target[rand_index]])
  rand_y = np.array([[y] for y in binary_target[rand_index]])
  sess.run(train_step, feed_dict={x1_data: rand_x1, x2_data: rand_x2, y_target: rand_y})
  if (i+1)%200==0:
    print('Step #' + str(i+1) + ' A = ' + str(sess.run(A)) + ', b = ' + str(sess.run(b)))


# 绘图
# 获取斜率/截距
# Pull out slope/intercept
[[slope]] = sess.run(A)
[[intercept]] = sess.run(b)

# 创建拟合线
x = np.linspace(0, 3, num=50)
ablineValues = []
for i in x:
 ablineValues.append(slope*i+intercept)

# 绘制拟合曲线
setosa_x = [a[1] for i,a in enumerate(iris_2d) if binary_target[i]==1]
setosa_y = [a[0] for i,a in enumerate(iris_2d) if binary_target[i]==1]
non_setosa_x = [a[1] for i,a in enumerate(iris_2d) if binary_target[i]==0]
non_setosa_y = [a[0] for i,a in enumerate(iris_2d) if binary_target[i]==0]
plt.plot(setosa_x, setosa_y, 'rx', ms=10, mew=2, label='setosa')
plt.plot(non_setosa_x, non_setosa_y, 'ro', label='Non-setosa')
plt.plot(x, ablineValues, 'b-')
plt.xlim([0.0, 2.7])
plt.ylim([0.0, 7.1])
plt.suptitle('Linear Separator For I.setosa', fontsize=20)
plt.xlabel('Petal Length')
plt.ylabel('Petal Width')
plt.legend(loc='lower right')
plt.show()

输出:

Step #200 A = [[ 8.70572948]], b = [[-3.46638322]]
Step #400 A = [[ 10.21302414]], b = [[-4.720438]]
Step #600 A = [[ 11.11844635]], b = [[-5.53361702]]
Step #800 A = [[ 11.86427212]], b = [[-6.0110755]]
Step #1000 A = [[ 12.49524498]], b = [[-6.29990339]]

TensorFlow实现创建分类器

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
介绍Python的@property装饰器的用法
Apr 28 Python
python操作字典类型的常用方法(推荐)
May 16 Python
Python使用pymysql小技巧
Jun 04 Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python django中8000端口被占用的解决
Dec 17 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
解决reload(sys)后print失效的问题
Apr 25 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python requests库的使用
Jan 06 Python
Python模拟随机游走图形效果示例
Feb 06 #Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 #Python
TensorFlow高效读取数据的方法示例
Feb 06 #Python
django使用xlwt导出excel文件实例代码
Feb 06 #Python
Python使用装饰器进行django开发实例代码
Feb 06 #Python
Python yield与实现方法代码分析
Feb 06 #Python
Django中间件工作流程及写法实例代码
Feb 06 #Python
You might like
php 中文处理函数集合
2008/08/27 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
node实现爬虫的几种简易方式
2019/08/22 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
Python二分法搜索算法实例分析
2015/05/11 Python
python 魔法函数实例及解析
2019/09/25 Python
Python内置类型性能分析过程实例
2020/01/29 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
python如何快速生成时间戳
2020/07/21 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
《我不是最弱小的》教学反思
2014/02/23 职场文书
安全承诺书格式
2014/05/21 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
个人先进事迹总结
2015/02/26 职场文书
开学典礼观后感
2015/06/15 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js