栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

深度学习记录

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深度学习记录

1.背景

鸢尾花的测量数据可以确定鸢尾花的种类,这些花之前已经被植物学专家鉴定为属于 setosa、versicolor 或 virginica 三个品种之一。对于这些测量数据,她可以确定每朵鸢尾花所属的品种。我们假设这位植物学爱好者在野外只会遇到这三种鸢尾花。我们的目标是构建一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学习,从而能够预测新鸢尾花的品种。

 

2.简单神经网络(鸢尾花分类)搭建: 1.数据处理

1.数据集读入

from sklearn import datasets#机器学习常用包,这里提供数据集

x_data=datasets.load_iris().data#从load_iris数据集中导入输入特征 y_data=datasets.load_iris().target#从load_iris数据集中导入标签

2.数据集乱序

np.random.seed(116)#随机数种子
np.random.shuffle(x_data)#打乱数据集输入特征
np.random.seed(116)#随机数种子
np.random.shuffle(y_data)#打乱数据集标签
tf.random.set_seed(116)

3.数据集中分出训练集与测试集

x_train=x_data[:-30]#截取数据集输入特征倒数30行之前作为训练集
y_train=y_data[:-30]#截取数据集标签倒数30行之前作为训练集
x_test=x_data[-30:]#截取数据集标签末尾30行作为训练集
y_test=y_data[-30:]#截取数据集标签末尾30行作为训练集

4.配成[输入特征,标签]对,每次喂入一个batch

train_db=tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(30)#将训练集输入特征和标签组合成元组,并以30组为一批
test_db=tf.data.Dataset.from_tensor_slices((x_test,y_test)).batch(30)#将测试集输入特征和标签组合成元组,并以30组为一批

2.构建模型:

scikit-learn 中有许多可用的分类算法。这里用的是 k 近邻分类器,这是一个很容易理解的算法。构建此模型只需要保存训练 集即可。要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近 的数据点,然后将找到的数据点的标签赋值给这个新数据点。 k 近邻算法中 k 的含义是,我们可以考虑训练集中与新数据点最近的任意 k 个邻居(比如 说,距离最近的 3 个或 5 个邻居),而不是只考虑最近的那一个。

1.定义神经网络中所有训练的参数

w1=tf.Variable(tf.random.truncated_normal([4,3],stddev=0.1,seed=1))#相当于正态分布产生4*3矩阵
b1=tf.Variable(tf.random.truncated_normal([3],stddev=0.1,seed=1))#相当于正态分布产生3*1矩阵

2.嵌套循环迭代,with更新参数,显示当前loss.

for epoch in range(epoc):#循环500次
    for step,(x_train,y_train) in enumerate(train_db):#枚举每批训练集数据,step为当前批次,将同一批的数据进行相同操作
        with tf.GradientTape() as tape:#tf.GradientTape用来计算梯度
          y=tf.matmul(tf.cast(x_train,dtype=tf.float32), w1)+b1#tf.matmul将x_train和w1相乘,计算出y,将数据类型转换成和w1一致,防止数据类型不一致无法计算
          y=tf.nn.softmax(y)#将y归一化,符合概率分布,使得特征更加明显
          y_=tf.one_hot(y_train,depth=3)#独热码,生成长度为depth位的向量
          loss=tf.reduce_mean(tf.square(y_-y))#redunce_mean计算平均值,square计算平方,计算出损失函数
          loss_all+=loss.numpy()#将tensor变量转换为非tensor变量,累加每批损失值
          grads=tape.gradient(loss,[w1,b1])#计算梯度值
          w1.assign_sub(lr*grads[0])#参数更新为lr*grads[0]
          b1.assign_sub(lr*grads[1])#参数更新为lr*grads[1]
    print("epoch loss")
    print(epoch," ",loss_all/4)#输出平均损失值

3.计算当前函数前向传播后的准确率,显示当前acc。

   for x_test,y_test in test_db:#枚举每批测试集数据
        y=tf.matmul(tf.cast(x_test,dtype=tf.float32),w1)+b1#用之前更新后的w1和b1计算出预测结果
        y=tf.nn.softmax(y)
        pred=tf.argmax(y,axis=1)#axis=1,记录每一行最大值。axis=0,记录每一列最大值。
        pred=tf.cast(pred,dtype=y_test.dtype)#将pred转换成测试集数据类型
        correct=tf.cast(tf.equal(pred,y_test),dtype=tf.int32)#tf.equal比较预测结果和测试集,将返回值转换成int32类型
        correct=tf.reduce_sum(correct)#统计每批正确个数
        total_correct+=int(correct)#累加正确个数
        total_number+=x_test.shape[0]#累加测试数据个数
        acc=total_correct/total_number#正确率
        test_acc.append(acc)#将正确率追加到正确率列表末尾

4.acc/loss可视化

plt.title("标题")#设置标题
plt.xlabel("epoch")#x轴标签
plt.ylabel("loss")#y轴标签
plt.plot(train_loss_result, label="$loss$")
plt.legend()#设置图例
plt.show()#显示图
3.模型评估(可视化):

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号