首页 分享 tensorflow2.0: 鸢尾花分类

tensorflow2.0: 鸢尾花分类

来源:花匠小妙招 时间:2025-01-03 12:53

最新推荐文章于 2023-02-18 13:41:46 发布

斗南花卉市场 于 2021-12-26 16:16:07 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

这一系列的文章是【北京大学】Tensorflow2.0_哔哩哔哩_bilibili的笔记,这个课程讲得很好,推荐观看。话不多说直接放代码:

# 第一步:加载所需的库:

import tensorflow as tf

import numpy as np

from sklearn.datasets import load_iris

import matplotlib.pyplot as plt

# 第二步:读取数据:

X= load_iris().data #特征

y= load_iris().target #标签

type(X), type(y) #读取的数据是numpy数组

np.random.seed(116) #设定随机种子

np.random.shuffle(X) #打乱X的顺序

np.random.seed(116) #再次设定随机种子,一定要和上面的一样,否则y的顺序会和X不匹配

np.random.shuffle(y) #打乱y的顺序

tf.random.set_seed(116) #这个种子是为了神经网络的运行结果可复现

#分割训练集和测试集

X_train= X[:-30]

X_test= X[-30:] #最后30个数据作为测试集,下同

y_train= y[:-30]

y_test= y[-30:]

#下面这个是将数据分批输入神经网络,每批为32个数据

train_db= tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(32)

test_db= tf.data.Dataset.from_tensor_slices((X_test, y_test)).batch(32)

#第三步:建模

lr= 0.1 #学习率

train_loss_results= [] #记录训练损失

loss_all= 0 #在每个epoch中记录总损失

test_acc= [] #记录测试准确率

epoch= 500 #每条数据将会放入网络中500次,即迭代次数为500

#初始化权重:

w1= tf.Variable(tf.random.truncated_normal([4, 3], stddev= 0.1, seed= 1, dtype= tf.float64))

b1= tf.Variable(tf.random.truncated_normal([3], stddev= 0.1, seed= 1, dtype= tf.float64))

for epoch in range(epoch):

for step, (X_train, y_train) in enumerate(train_db): #因为有120条训练集数据,而batch=32,因此每次迭代会分为4个step

with tf.GradientTape() as tape: #梯度下降

y= tf.matmul(X_train, w1)+ b1

y= tf.nn.softmax(y) #将输出放进softmax激活函数中

y_= tf.one_hot(y_train, depth= 3, dtype= tf.float64) #将真实标签进行独热编码

loss= tf.reduce_mean(tf.square(y_-y)) #使用均方误差损失

loss_all+= loss.numpy() #将每个step产生的损失加到loss_all中作为这一个epoch的总损失

grads= tape.gradient(loss, [w1, b1]) #参数更新

w1.assign_sub(lr*grads[0])

b1.assign_sub(lr*grads[1])

print(f'epoch: {epoch}, loss: {loss_all/4}') #因为我们需要的是平均损失,因此要除以step数

train_loss_results.append(loss_all/4) #记录下这一个epoch的损失以备画图

loss_all= 0 #将此次epoch的损失重置为0以便记录下一个epoch的损失

#测试:

total_correct, total_number= 0, 0 #记录正确预测数与测试集大小

for X_test, y_test in test_db:

y= tf.matmul(X_test, w1)+ b1

y= tf.nn.softmax(y)

pred= tf.argmax(y, axis= 1)

pred= tf.cast(pred, dtype= y_test.dtype)

correct= tf.cast(tf.equal(pred, y_test), dtype= tf.int32) #将布尔型张量转化为整形张量

correct= tf.reduce_sum(correct) #将correct的各个分量加总得到这一个step中正确预测的数目

total_correct+= int(correct) #得到所有step预测正确的总数

total_number+= X_test.shape[0] #因此此时的X_test已不再是整个测试集,而只是测试集的一个step,因此要将各个step的X_test

#的大小加起来才得到整个测试集的大小

acc= total_correct/total_number #正确预测的条数除以测试集大小得到准确率

test_acc.append(acc) #记录准确率

#第四步:画图

#画损失曲线:

plt.title('loss function curve') #图表标题

plt.xlabel('Epoch') #X轴标签

plt.ylabel('Loss') #y轴标签

plt.plot(train_loss_results, label= 'Loss') #将每个epoch的损失连起来

plt.legend() #标注出图例

plt.show() #展示出来

#画准确率曲线:

plt.title('accuracy curve')

plt.xlabel('Epoch')

plt.ylabel('Accuracy')

plt.plot(test_acc, label= 'Accuracy')

plt.legend()

plt.show()

相关知识

python 使用Tensorflow训练BP神经网络实现鸢尾花分类
深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow
鸢尾花分类
对鸢尾花进行分类预测
Tensorflow2.0版本利用鸢尾花数据集,实现前向传播、反向传播,可视化loss曲线
逻辑回归鸢尾花分类可视化
【机器学习】鸢尾花分类
鸢尾花的分类(四种方法)
决策树完成鸢尾花分类
教程:对鸢尾花进行分类

网址: tensorflow2.0: 鸢尾花分类 https://www.huajiangbk.com/newsview1427374.html

所属分类:花卉
上一篇: 花的面分类法 免费文案+PPT模
下一篇: 2022年中国啤酒花托盘市场研究

推荐分享