首页 > 其他分享 >深度学习中对多个目标标签进行训练和预测代码实例

深度学习中对多个目标标签进行训练和预测代码实例

时间:2023-10-04 14:55:23浏览次数:43  
标签:num 实例 标签 代码 train samples test output class

#Tensofrlow
#假设我们有一个任务是从图像中预测物体的位置(x坐标和y坐标)和物体的类别。这个任务有三个目标标签:x坐标、y坐标和类别。
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Input, Dense

# 创建模拟数据
num_samples = 1000
num_classes = 10

# 特征数据
X = np.random.rand(num_samples, 64)

# 目标标签:x坐标、y坐标、类别
y_x = np.random.rand(num_samples, 1)
y_y = np.random.rand(num_samples, 1)
y_class = np.random.randint(0, num_classes, size=(num_samples,))

# 划分训练集和测试集
split_ratio = 0.8
num_train_samples = int(num_samples * split_ratio)

X_train, X_test = X[:num_train_samples], X[num_train_samples:]
y_train_x, y_test_x = y_x[:num_train_samples], y_x[num_train_samples:]
y_train_y, y_test_y = y_y[:num_train_samples], y_y[num_train_samples:]
y_train_class, y_test_class = y_class[:num_train_samples], y_class[num_train_samples:]

# 创建输入层
input_layer = Input(shape=(64,))

# 创建多个输出层,每个输出层对应一个目标标签
output_x = Dense(1, name='output_x')(input_layer)
output_y = Dense(1, name='output_y')(input_layer)
output_class = Dense(num_classes, activation='softmax', name='output_class')(input_layer)

# 创建多输出模型
model = keras.Model(inputs=input_layer, outputs=[output_x, output_y, output_class])

# 编译模型,可以为每个输出指定不同的损失函数
model.compile(optimizer='adam',
              loss={'output_x': 'mean_squared_error',
                    'output_y': 'mean_squared_error',
                    'output_class': 'sparse_categorical_crossentropy'},
              metrics={'output_x': 'mae', 'output_y': 'mae', 'output_class': 'accuracy'})

# 训练模型
history = model.fit(X_train, {'output_x': y_train_x, 'output_y': y_train_y, 'output_class': y_train_class},
                    validation_split=0.2, epochs=10, batch_size=32)

# 使用模型进行多输出预测
y_pred_x, y_pred_y, y_pred_class = model.predict(X_test)

# y_pred_x包含了对x坐标的预测
# y_pred_y包含了对y坐标的预测
# y_pred_class包含了对类别的预测

‘’‘
在多输出模型中,每个输出层可以有不同的损失函数,以适应不同类型的目标标签。
‘’‘
#pythroch
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import numpy as np

# 假设你有训练数据和测试数据
X_train = np.random.rand(100, 10)  # 假设有100个样本和10个特征
y_train = np.random.rand(100, 5)   # 假设有5个目标标签
X_test = np.random.rand(20, 10)
y_test = np.random.rand(20, 5)

# 将数据转换为 PyTorch 张量
X_train_tensor = torch.FloatTensor(X_train)
y_train_tensor = torch.FloatTensor(y_train)
X_test_tensor = torch.FloatTensor(X_test)
y_test_tensor = torch.FloatTensor(y_test)

# 创建一个多输出的神经网络模型
class MultiOutputModel(nn.Module):
    def __init__(self, input_size, output_size):
        super(MultiOutputModel, self).__init__()
        self.fc1 = nn.Linear(input_size, 64)
        self.fc2 = nn.Linear(64, output_size)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 初始化模型
input_size = X_train.shape[1]  # 输入特征的维度
output_size = y_train.shape[1]  # 输出标签的维度
model = MultiOutputModel(input_size, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam 优化器

# 转换数据为 DataLoader
train_dataset = TensorDataset(X_train_tensor, y_train_tensor)
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)

# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
    for batch_X, batch_y in train_loader:
        optimizer.zero_grad()
        outputs = model(batch_X)
        loss = criterion(outputs, batch_y)
        loss.backward()
        optimizer.step()

# 在测试集上进行预测
with torch.no_grad():
    test_outputs = model(X_test_tensor)
    test_loss = criterion(test_outputs, y_test_tensor)
    print(f"Test Loss: {test_loss.item()}")

# 打印预测的结果
print("Predicted Outputs:")
print(test_outputs.numpy())

 

标签:num,实例,标签,代码,train,samples,test,output,class
From: https://www.cnblogs.com/jinbb/p/17742262.html

相关文章

  • c语言代码练习6
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>intmain(){inta=0;intb=0;intc=0;inti=0;scanf("%d%d%d",&a,&b,&c);if(a<b){......
  • 静态方法不依赖实例对象的调用例题
    publicclassNull{publicstaticvoidsmile(){System.out.println("haha");}publicstaticvoidmain(String[]args){((Null)null).smile();}} 问代码之后之后,能否正常打印? 答案:是可以的,打印“haha” 解释:由于静态方法......
  • UML教程1简介2UML图实例
    1简介主要:UML图表简介、UML符号、关系、类图、对象图、用例图、状态机图、组件图、部署图和UML工具。1.2什么是UML?UML是统一建模语言(UnifiedModelingLanguage)的缩写。它是一种标准,主要用于为现实世界中的任何软件系统创建面向对象、有意义的文档模型。它为我们提供了一种开......
  • 关于博客的分类和标签
    写在前面:本人对暂无太多写文经验,在希望养成写作习惯开始之际,希望讨论一下博客中,文章分类和标签,这两种常用的文章归类方法。一方面参考了以下几位的博客分类https://www.cnblogs.com/me115/p/4529944.htmlhttps://www.cnblogs.com/wzh2010/这两位根据文章技术领域进行分类还有......
  • 梦断代码阅读笔记03
    1、程序员与用户的交涉读这本书,发现其实这个团队也有过交工的时候,只是仅仅在项目成员满意的情况下,而没有达到用户的预期,也就是二者沟通不充分,程序员本身并没有真正了解到用户的需求,只是按照自己认为的行事,导致了期望之间的偏差,也造成了工作量的加大,和项目的返工;这也和王老师之......
  • 以下是一个复杂的 C 语言代码示例,展示了如何使用递归函数来计算斐波那契数列: ```c #i
    以下是一个复杂的C语言代码示例,展示了如何使用递归函数来计算斐波那契数列:#include<stdio.h>//递归函数计算斐波那契数列intfibonacci(intn){if(n<=1){returnn;}returnfibonacci(n-1)+fibonacci(n-2);}intmain(){intnum;......
  • 以下是一个比较复杂的R语言代码示例: ```R # 生成随机数 set.seed(123) data <- rnorm
    以下是一个比较复杂的R语言代码示例:#生成随机数set.seed(123)data<-rnorm(1000)#数据处理和分析data_mean<-mean(data)data_sd<-sd(data)data_median<-median(data)#创建一个绘图窗口par(mfrow=c(2,2))#绘制直方图hist(data,main="HistogramofDat......
  • Go 语言代码示例。使用并发和通道的并行计算素数的示例代码
    Go语言代码示例。使用并发和通道的并行计算素数的示例代码:packagemainimport( "fmt")funcmain(){ lowerLimit:=2 upperLimit:=100 //创建管道,用于在协程之间传递素数 primes:=make(chanint) //创建一个协程来生成素数序列 gogeneratePrimes(primes)......
  • c语言代码练习5
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>intmain(){inti=0;charpassword[20]={0};for(i=0;i<3;i++){printf("请输入您的密码,今天是你第%d次输入:",i+1);scanf("%s&quo......
  • c语言代码练习4(改进)
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>intmain(){/*呈现效果*################*a##############!*ay############!!*......*ayuex......