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中os.path用法分析
Jan 15 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python交换两个变量的值方法
Jan 12 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
Django中的静态文件管理过程解析
Aug 01 Python
pytorch之ImageFolder使用详解
Jan 06 Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 Python
python3爬虫中异步协程的用法
Jul 10 Python
浅谈Python爬虫原理与数据抓取
Jul 21 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输出缓存ob系列函数详解
2014/03/11 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
网络信息管理员岗位职责
2014/01/05 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
mysql部分操作
2021/04/05 MySQL
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android