dnn分类鸢尾花pytorch_TensorFlow入门教程(二):构建神经网络分类器,对。。。

dnn分类鸢尾花pytorch_TensorFlow⼊门教程(⼆):构建神
经⽹络分类器,对。。。
本教程基于TensorFlow1.4版本, 使⽤DNNClassifier构建模型. 因为百家号的编辑器⾥引⽤时⽆法在头部添加空格,所以以后使⽤_代替两个空格,以后系列教程⾥同此操作.。
鸢尾花分类问题
我们根据鸢尾花的花萼和花瓣⼤⼩可以将其分为下⾯三种不同的品种。
不同品种的鸢尾花
鸢尾花数据集包含四个特征和⼀个标签。这四个特征确定了单株鸢尾花的下列植物学特征:
花萼长度
花萼宽度
花瓣长度
花瓣宽度
我们的模型会将这些特征表⽰为 float32数值数据。
该标签确定了鸢尾花品种,品种必须是下列任意⼀种:
⼭鸢尾 (0)
变⾊鸢尾 (1)
维吉尼亚鸢尾 (2)
我们的模型会将该标签表⽰为 int32 分类数据。
下表显⽰了数据集中的三个样本:
样本⽰例
算法
该程序会训练⼀个具有以下拓扑结构的深度神经⽹络分类器模型:
3个隐藏层。
前后个隐藏层包含 10 个节点,中间的隐藏层包含20个节点。
下图展⽰了特征、隐藏层和预测(并未显⽰隐藏层中的所有节点):
推理
在⽆标签样本上运⾏经过训练的模型会产⽣三个预测,即相应鸢尾花属于指定品种的可能性。这些输出预测的总和是 1.0。例如,对⽆标签样本的预测可能如下所⽰:
0.03(⼭鸢尾)
0.95(变⾊鸢尾)
0.02(维吉尼亚鸢尾)
上⾯的预测表⽰指定⽆标签样本是变⾊鸢尾的概率为 95%。
使⽤tensorflow实现上述分类功能
⾸先我们需要导⼊我们需要使⽤的module, 然后使⽤urlib下载数据集.
import os
import urllib
import numpy as np
import tensorflow as tf
# 定义数据集存放⽂件名与下载地址,分为训练集与测试
IRIS_TRAINING = "iris_training.csv"
来书网IRIS_TRAINING_URL = "/data/iris_training.csv"
IRIS_TEST = "iris_test.csv"
IRIS_TEST_URL = "/data/iris_test.csv"
#判断本地⽂件不存在,就从⽹上下载数据集
if not ists(IRIS_TRAINING):
__raw = urllib.urlopen(IRIS_TRAINING_URL).read()
__with open(IRIS_TRAINING, "w") as f:
____f.write(raw)
if not ists(IRIS_TEST):
__raw = urllib.urlopen(IRIS_TEST_URL).read()
__with open(IRIS_TEST, "w") as f:
____f.write(raw)
数据集下载完成后, 我们使⽤ib下的datasetAPI从CSV⽂件⾥读取数据,同时指定features类型为float32, 指定target的类型为int32.
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
__filename=IRIS_TRAINING,
__target_dtype=np.int,
__features_dtype=np.float32)
test_set = tf.contrib.learn.datasets.base.load_csv_with_header(
__filename=IRIS_TEST,
__target_dtype=np.int,
__features_dtype=np.float32)
# 指定所有特征都使⽤真实的值, 特征由4个⽅⾯的数据组成
feature_columns = [tf.al_valued_column("", dimension=4)]
在构造完成训练和测试的dataset后, 我们使⽤contrib.learn下的DNNClassifier构建⼀个分类器, 分类器含有三个隐藏层, 第⼀层与第三层含有10个隐藏神经元, 第⼆层含有20个隐藏神经元. 同时指定⽬标类别数量与训练时存储模型的位置.
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
__hidden_units=[10, 20, 10],n_classes=3,model_dir="/tmp/iris_model")
下⼀步定义⽤于输⼊数据集⾥对应的的x, y 数据.
def get_train_inputs():
__x = tf.constant(training_set.data)
温玉理疗床__y = tf.constant(training_set.target)
__return x, y
指定产⽣输⼊数据的函数, 设置训练总步数为2000步, 开始训练.
classifier.fit(input_fn=get_train_inputs, steps=2000)
# 训练时输出以下信息
INFO:tensorflow:Saving checkpoints for 1 into /tmp/iris_model/model.ckpt. INFO:tensorflow:loss = 1.0867096, step = 1 INFO:tensorflow:global_step/sec: 551.016 INFO:tensorflow:loss = 0.10840674, step = 101 (0.183 sec)
INFO:tensorflow:global_step/sec: 628.287 INFO:tensorflow:loss = 0.07523667, step = 201 (0.129 se
c)
INFO:tensorflow:global_step/sec: 755.487 INFO:tensorflow:loss = 0.06683544, step = 301 (0.132 sec)
INFO:tensorflow:global_step/sec: 764.537 INFO:tensorflow:loss = 0.06237885, step = 401 (0.131 sec)
INFO:tensorflow:global_step/sec: 792.633 INFO:tensorflow:loss = 0.059599478, step = 501 (0.126 sec)
从上⾯的输出信息中可以看到, 在训练过程中, 我们整个神经⽹络的loss在不断变⼩, 说明的我们的神经⽹络经过训练在不断收敛. 在训练完成后, 我们的模型被保存在了/tmp/iris_model/model.ckpt这个⽂件中.
训练完成后, 同时我们可以在训练完成后, 继续加⼊以下代码来测试⼀下我们的模型在测试集上的正确率.
def get_test_inputs():
__x = tf.constant(test_set.data)
爆闪灯管
__y = tf.constant(test_set.target)7-adca
__return x, y
# 计算测试集正确率
accuracy_score = classifier.evaluate(input_fn=get_test_inputs,steps=1)["accuracy"]
print("\nTest Accuracy: {0:f}\n".format(accuracy_score))
# 输出
INFO:tensorflow:Starting evaluation at 2018-07-16-15:05:39
INFO:tensorflow:Restoring parameters from /tmp/iris_model/model.ckpt-2000
INFO:tensorflow:Evaluation [1/1] INFO:tensorflow:Finished evaluation at 2018-07-16-15:05:39 INFO:tensorflow:Saving dict for global step 2000: accuracy = 0.96666664, global_step = 2000, loss = 0.056058828
Test Accuracy: 0.966667
从上⾯的输出中我们可以发现, 经过2000步的训练, 我们的模型在测试集上的正确率达到了96.6667%.
同时DNNClassifier也为我们提供了获得预测结果的接⼝, 我们只需要给出输⼊数据, 运⾏predict函数就能获得预测结果.
def new_samples():
三基光源__return np.array([[6.4, 3.2, 4.5, 1.5],
____[5.8, 3.1, 5.0, 1.7]], dtype=np.float32)
predictions = list(classifier.predict(input_fn=new_samples))
print("New Samples, Class Predictions: {}\n"
__.format(predictions))
# 输出
bipic
New Samples, Class Predictions: [1, 2]
如上⾯输出所⽰, 我们获得了鸢尾花品种的预测结果.
⼤家经过这次教程的学习后, 可以⾃⼰通过DNNRegressor构造回归器, 对经典的房屋价格问题进⾏实验研究.本系列教程往期⽂章地址:

本文发布于:2024-09-22 00:56:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/216574.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:训练   鸢尾花   预测   数据   测试   模型   品种   指定
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议