【paddlepaddle】鸢尾花分类

数据处理

import numpy as np
import paddle
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split,cross_val_score

iris = load_iris()
iris_x = iris.data
iris_y = iris.target
train_x,test_x,train_y,test_y = train_test_split(iris_x,iris_y,test_size=0.3)   #划分数据集和测试集
train_x = train_x.astype("float32")
train_y = train_y.astype("int64")
train_x = paddle.to_tensor(train_x)
train_y = paddle.to_tensor(train_y)

构建模型

class Net(paddle.nn.Layer):
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = paddle.nn.Linear(n_feature, n_hidden)   # 定义隐藏层网络
        self.out = paddle.nn.Linear(n_hidden, n_output)   # 定义输出层网络
    
    def forward(self, x):
        x =paddle.nn.functional.sigmoid(self.hidden(x))
        x = self.out(x)                   # 输出层不用激活函数
        return x

其他配置

  • 优化器
  • 损失函数
  • 训练次数
net = Net(n_feature=4, n_hidden=30, n_output=3)    #n_feature:输入的特征维度,n_hiddenb:神经元个数,n_output:输出的类别个数
optimizer =  paddle.optimizer.SGD(learning_rate=0.1, parameters=net.parameters(), weight_decay=0.01) # 优化器选用随机梯度下降方式
loss_func = paddle.nn.CrossEntropyLoss() # 对于多分类一般采用的交叉熵损失函数
epoch = 500

模型训练

for t in range(epoch):
    out = net(train_x)                 # 输入input,输出out
    loss = loss_func(out, train_y)     # 输出与label对比
    if t%20 == 0:
        print(loss.item())
    loss.backward()         # 前馈操作
    optimizer.step()        # 使用梯度优化器
    optimizer.clear_grad()  # 梯度清零

计算分类准确率

import paddle.nn.functional as F
out = net(train_x) #out是一个计算矩阵,可以用Fun.softmax(out)转化为概率矩阵
# 得到分类结果的概率矩阵
out = F.softmax(out)
print(type(out))
m = paddle.metric.Accuracy()
# 输入的 out 必须是 Tensor 类型且是一个分类结果的概率矩阵,train_y 的数据类型也必须是 Tensor 类型的
correct = m.compute(out, train_y)
m.update(correct)
res = m.accumulate()
print(res) 

保存模型

paddle.save(net.state_dict(), "ann.pdparams")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值