首页 分享 深度学习TensorFlow 线性分类案例鸢尾花分类

深度学习TensorFlow 线性分类案例鸢尾花分类

来源:花匠小妙招 时间:2024-12-14 04:27

通过 TensorFlow 对鸢尾花进行分类

鸢尾花有300多种类别,主要分为三个大类分别为:

Iris setosaIris virginicaIris versicolor

# [外链图片转存失败(img-YiS1cGTo-1562512656938)(https://www.tensorflow.org/images/iris_three_species.jpg)]

模块导入

from __future__ import absolute_import, division, print_function, unicode_literals import os import matplotlib.pyplot as plt import tensorflow as tf 1234 训练数据下载

使用tf.keras.utils.get_file函数下载训练数据集文件。 这将返回下载文件的文件路径。

rain_dataset_url = "https://storage.googleapis.com/download.tensorflow.org/data/iris_training.csv" train_dataset_fp = tf.keras.utils.get_file(fname=os.path.basename(train_dataset_url),origin=train_dataset_url) print('下载数据至:', train_dataset_fp) 123 查看数据

使用head -n5命令查看数据

!head -n5 {train_dataset_fp} 1

column_names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, ‘species’]

获取特征和标签名

feature_name = column_names[:-1] label_name = column_names[-1] 12 创建ensorFlow的数据集

batch_size=32 train_dataset = tf.data.experimental.make_csv_dataset( train_dataset_fp, batch_size, column_names=column_names, label_name=label_name, num_epochs=1 ) features, labels = next(iter(train_dataset)) print(features) 12345678910 数据可视化

plt.scatter(features['petal_length'], features['sepal_length'], c=labels, cmap='viridis') plt.xlabel("Petal length") plt.ylabel("Sepal length") plt.show() 12345678

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THdR2PXN-1594800136235)(/Users/zengxuefeng/Documents/Python教程/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9kb2l0LXNwYWNlLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70.png)]

def pack_features_vector(features, labels): features = tf.stack(list(features.values()), axis=1) return features, labels 使用tf.data.Dataset.map将重构函数运用到每条数据中。 train_dataset = train_dataset.map(pack_features_vector) features, labels = next(iter(train_dataset)) print(features[:5]) 123456789 使用Keras创建模型

# 构建线性模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='relu',input_shape=(4,)), tf.keras.layers.Dense(10, activation='relu'), tf.keras.layers.Dense(3) ]) 1234567 测试模型结构

prediction = model(features) prediction[:5] 1 多分类任务需要使用softmax进行归一化

tf.nn.softmax(prediction)[:5] 1 使用tf.argmax获取概率最大的类标签

print('prediction:', tf.argmax(prediction, axis=1)) print('label:', labels) 123 创建训练模型

# 损失函数* loss_object=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) 123 使用tf.GradientTape计算loss对所有变量的梯度

def grad(model, inputs, targets): with tf.GradientTape() as tape: loss_value = loss(model, inputs, targets) return loss_value, tape.gradient(loss_value, model.trainable_variables) 12345 创建优化器

optimizer = tf.keras.optimizers.Adam(learning_rate=0.01) # 使用优化器 loss_value, grads = grad(model, features, labels) print('步数:{}, 初始loss值:{}'.format(optimizer.iterations.numpy(),loss_value.numpy())) optimizer.apply_gradients(zip(grads, model.trainable_variables)) print('步数:{}, loss值:{}'.format(optimizer.iterations.numpy(),loss(model,features, labels).numpy())) 123456 训练循环

# 保存loss和acc train_loss_results=[] train_accuracy_results=[] num_epochs =201 for epoch in range(num_epochs): # 用于记录loss和acc的类 epoch_loss_avg = tf.keras.metrics.Mean() epoch_accuracy = tf.keras.metrics.SparseCategoricalAccuracy() # 训练循环 for x, y in train_dataset: # 获取loss和梯度 loss_value, grads = grad(model, x, y) # 梯度优化 optimizer.apply_gradients(zip(grads, model.trainable_variables)) # 记录loss均值 epoch_loss_avg(loss_value) # 记录准确率 epoch_accuracy(y, model(x)) # 保存每个epoch的loss和acc train_loss_results.append(epoch_loss_avg.result()) train_accuracy_results.append(epoch_accuracy.result()) if epoch % 50 == 0: print("Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}".format(epoch, epoch_loss_avg.result(), epoch_accuracy.result()))

123456789101112131415161718192021222324252627282930 可视化训练过程

fig, axes = plt.subplots(2, sharex=True, figsize=(12, 8)) fig.suptitle('Training Metrics') axes[0].set_ylabel("Loss", fontsize=14) axes[0].plot(train_loss_results) axes[1].set_ylabel("Accuracy", fontsize=14) axes[1].set_xlabel("Epoch", fontsize=14) axes[1].plot(train_accuracy_results) plt.show() 12345678910

在这里插入图片描述

评估模型

test_url = "https://storage.googleapis.com/download.tensorflow.org/data/iris_test.csv" test_fp = tf.keras.utils.get_file(fname=os.path.basename(test_url), origin=test_url) 12345

test_dataset = tf.data.experimental.make_csv_dataset( test_fp, batch_size, column_names=column_names, label_name='species', num_epochs=1, shuffle=False) test_dataset = test_dataset.map(pack_features_vector) 123456789

# 准确率统计类 test_accuracy = tf.keras.metrics.Accuracy() for (x,y) in test_dataset: logits = model(x) prediction = tf.argmax(logits, axis=1, output_type=tf.int32) test_accuracy(prediction, y) print('测试集准确率:', test_accuracy.result()) 1234567891011 结果对比

tf.stack([y, prediction], axis=1) 1 使用训练的模型进行预测

predict_dataset = tf.convert_to_tensor([ [5.1, 3.3, 1.7, 0.5,], [5.9, 3.0, 4.2, 1.5,], [6.9, 3.1, 5.4, 2.1] ]) predictions = model(predict_dataset) for i, logits in enumerate(predictions): class_idx = tf.argmax(logits).numpy() p = tf.nn.softmax(logits)[class_idx] name = class_names[class_idx] print("Example {} prediction: {} ({:4.1f}%)".format(i, name, 100*p)) 123456789101112131415

相关知识

深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow
TensorFlow学习记录(八)
深度学习应用开发
TensorFlow使用BP神经网络实现鸢尾花分类
神经网络与深度学习
Tensorflow鸢尾花分类(数据加载与特征处理)
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
TensorFlow 2建立神经网络分类模型——以iris数据为例
基于深度学习的花卉智能分类识别系统
基于Logistic回归模型对鸢尾花数据集的线性多分类

网址: 深度学习TensorFlow 线性分类案例鸢尾花分类 https://www.huajiangbk.com/newsview1085984.html

所属分类:花卉
上一篇: 支付宝合种爱情树别人能看到吗?在
下一篇: 大学里的爱情树:有花无果但美好记

推荐分享