3种鸢尾花类别,每个类别有50个样本,每个样本中包括4种鸢尾花的属性特征和鸢尾花的品种(sepal length, sepal width, petal length, petal width, species )花萼长度,花萼宽度,花瓣长度,花瓣宽度,品种
Species
0——山鸢花setosa
1——变色鸢尾 versicolour
2——维吉尼亚鸢尾 virginica
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from sklearn import datasets#从sklearn包datasets中读入数据集 1234
x_data = datasets.load_iris().data#返回iris数据集所有输入特征 y_data= datasets.load_iris().target#返回iris数据集所有标签 print(x_data.shape) print(y_data.shape) 1234
输出看一下数据和标签的shape
(150, 4) (150,) 12'
将数据集乱序和数据集划分,其中seed括号中的数值可以任意给定
np.random.seed(116)#输入特征和标签仍一一对应 只要括号中设置的数字相同 取出的随机数就相同 np.random.shuffle(x_train)#np.random.shuffle()函数将x_data数据集中的数据自身打乱 np.random.seed(116) np.random.shuffle(y_train) tf.random.set_seed(116) #数据集分成永不相见的训练集和测试集 训练集前120个,测试集前30个 x_train = x_data[:-30]#输入数据集中前120个数据 y_train = y_data[:-30] x_test = x_data[-30:] y_test = y_data[-30:] 12345678910
由于数据集较为简单,选择一层全连接层搭建网络结构,注意由于是3分类,最后一层全连接的输出是3,为了防止过拟合,选择了l2正则化方法
model = tf.keras.models.Sequential([ tf.keras.layers.Dense(3,activation='softmax',kernel_regularizer=tf.keras.regularizers.l2()) ]) #生成神经网络的参数,4个输入特征,所以输入层为4个输入节点;因为3分类,所以输出层为3个神经元。 #全连接层,3个神经元,非线性函数softmax,正则选tf.keras.regularizers.l2() 12345
对于多分类问题,选择交叉熵损失函数,对于回归问题,选择mean squared error(均方差)损失函数,由于前面进行了softmax概率分布,所以参数是false
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['sparse_categorical_accuracy']) #优化器选择sgd 损失函数 y_是数值,y是独热码 1234
history = model.fit(x_train,y_train,batch_size=32,epochs=100,validation_data=(x_test,y_test),validation_freq=1) 1
import matplotlib.pyplot as plt acc = history.history['sparse_categorical_accuracy'] val_acc = history.history['val_sparse_categorical_accuracy'] loss = history.history['loss'] val_loss = history.history['val_loss'] epochs = range(len(acc)) plt.plot(epochs, acc, 'r', label='Training accuracy') plt.plot(epochs, val_acc, 'g', label='Validation accuracy') plt.title('Training and validation accuracy') plt.figure() plt.plot(epochs, loss, 'r', label='Training Loss') plt.plot(epochs, val_loss, 'g', label='Validation Loss') plt.title('Training and validation loss') plt.legend() plt.show()
1234567891011121314151617181920result = model.predict(x_test) np.round(result,2) 12
array([[0.06, 0.78, 0.16], [0.96, 0.04, 0. ], [0.05, 0.76, 0.19], [0.03, 0.73, 0.24], [0.02, 0.65, 0.33], [0. , 0.23, 0.77], [0.04, 0.68, 0.28], [0.06, 0.84, 0.1 ], [0.03, 0.65, 0.32], [0.05, 0.79, 0.16], [0.94, 0.06, 0. ], [0.92, 0.08, 0. ], [0.96, 0.04, 0. ], [0.94, 0.06, 0. ], [0.92, 0.08, 0. ], [0.03, 0.72, 0.25], [0.02, 0.69, 0.29], [0.95, 0.05, 0. ], [0.03, 0.68, 0.3 ], [0.92, 0.08, 0. ], [0.08, 0.83, 0.1 ], [0.02, 0.76, 0.22], [0. , 0.07, 0.92], [0.01, 0.37, 0.62], [0.92, 0.08, 0. ], [0. , 0.09, 0.91], [0.96, 0.04, 0. ], [0.95, 0.05, 0. ], [0. , 0.1 , 0.9 ], [0.04, 0.8 , 0.17]], dtype=float32)
123456789101112131415161718192021222324252627282930print(y_test) 1
[1 0 1 1 1 2 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 1 2 2 0 2 0 0 2 1] 1
可以发现在测试集的30个样本均训练正确
本例是直接使用keras内部的数据集,标签直接是0、1、2,不再是文字,不用再进行编码,否则可以使用以下代码。
from sklearn.preprocessing import LabelEncoder # 将标签转化成一个整数 encoder = LabelEncoder() Y_encoded = encoder.fit_transform(Y) # Y是没经处理的文字标签 Y_onehot = np_utils.to_categorical(Y_encoded) # 该行代码是将0、1、2等数字转化为独热编码 1234
相关知识
视觉传达vi毕业设计
毕业设计答辩
毕业设计论文
环艺毕业设计总结通用12篇
Java毕业设计
【51单片机毕业设计
关于做好2025届毕业设计(论文)选题工作的通知
基于nodejs+vue英语学习博客[开题+源码+程序+论文]计算机毕业设计
艺术学院举办2023届本科生毕业设计作品展
计算机毕业设计选题推荐
网址: 毕业设计练习 https://m.huajiangbk.com/newsview678251.html
上一篇: 平流式沉淀池计算例题.doc |
下一篇: 小学毕业鲜花 |