【域适应】基于深度域适应MMD损失的典型四分类任务实现

这篇具有很好参考价值的文章主要介绍了【域适应】基于深度域适应MMD损失的典型四分类任务实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于

MMD (maximum mean discrepancy)是用来衡量两组数据分布之间相似度的度量。一般地,如果两组数据分布相似,那么MMD 损失就相对较小,说明两组数据/特征处于相似的特征空间中。基于这个想法,对于源域和目标域数据,在使用深度学习进行特征提取中,使用MMD损失,可以让模型提取两个域的共有特征/空间,从而实现源域到目标域的迁移。

参考论文:https://arxiv.org/abs/1409.6041

工具

Python

【域适应】基于深度域适应MMD损失的典型四分类任务实现,电生理信号处理项目实践,机器学习,人工智能,域适应,深度学习,卷积神经网络

 【域适应】基于深度域适应MMD损失的典型四分类任务实现,电生理信号处理项目实践,机器学习,人工智能,域适应,深度学习,卷积神经网络

方法实现

定义mmd函数
#!/usr/bin/env python
# encoding: utf-8

import torch

# Consider linear time MMD with a linear kernel:
# K(f(x), f(y)) = f(x)^Tf(y)
# h(z_i, z_j) = k(x_i, x_j) + k(y_i, y_j) - k(x_i, y_j) - k(x_j, y_i)
#             = [f(x_i) - f(y_i)]^T[f(x_j) - f(y_j)]
#
# f_of_X: batch_size * k
# f_of_Y: batch_size * k
def mmd_linear(f_of_X, f_of_Y):
    delta = f_of_X - f_of_Y
    loss = torch.mean(torch.mm(delta, torch.transpose(delta, 0, 1)))
    return loss

def guassian_kernel(source, target, kernel_mul=2.0, kernel_num=5, fix_sigma=None):
    n_samples = int(source.size()[0])+int(target.size()[0])
    total = torch.cat([source, target], dim=0)
    total0 = total.unsqueeze(0).expand(int(total.size(0)), int(total.size(0)), int(total.size(1)))
    total1 = total.unsqueeze(1).expand(int(total.size(0)), int(total.size(0)), int(total.size(1)))
    L2_distance = ((total0-total1)**2).sum(2)
    if fix_sigma:
        bandwidth = fix_sigma
    else:
        bandwidth = torch.sum(L2_distance.data) / (n_samples**2-n_samples)
    bandwidth /= kernel_mul ** (kernel_num // 2)
    bandwidth_list = [bandwidth * (kernel_mul**i) for i in range(kernel_num)]
    kernel_val = [torch.exp(-L2_distance / bandwidth_temp) for bandwidth_temp in bandwidth_list]
    return sum(kernel_val)#/len(kernel_val)


def mmd_rbf_accelerate(source, target, kernel_mul=2.0, kernel_num=5, fix_sigma=None):
    batch_size = int(source.size()[0])
    kernels = guassian_kernel(source, target,
        kernel_mul=kernel_mul, kernel_num=kernel_num, fix_sigma=fix_sigma)
    loss = 0
    for i in range(batch_size):
        s1, s2 = i, (i+1)%batch_size
        t1, t2 = s1+batch_size, s2+batch_size
        loss += kernels[s1, s2] + kernels[t1, t2]
        loss -= kernels[s1, t2] + kernels[s2, t1]
    return loss / float(batch_size)

def mmd_rbf_noaccelerate(source, target, kernel_mul=2.0, kernel_num=5, fix_sigma=None):
    batch_size = int(source.size()[0])
    kernels = guassian_kernel(source, target,
                              kernel_mul=kernel_mul, kernel_num=kernel_num, fix_sigma=fix_sigma)
    XX = kernels[:batch_size, :batch_size]
    YY = kernels[batch_size:, batch_size:]
    XY = kernels[:batch_size, batch_size:]
    YX = kernels[batch_size:, :batch_size]
    loss = torch.mean(XX + YY - XY -YX)
    return loss
定义基于mmd特征对齐CNN模型
# encoding=utf-8

import torch.nn as nn
import torch.nn.functional as F


class Network(nn.Module):
    def __init__(self):
        super(Network, self).__init__()
        self.conv1 = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=64, kernel_size=(1, 3)),
            nn.ReLU()
        )
        self.conv2 = nn.Sequential(
            nn.Conv2d(in_channels=64, out_channels=64, kernel_size=(1, 3)),
            nn.ReLU(),
            nn.Dropout(0.4),
            nn.MaxPool2d(kernel_size=(1, 2), stride=2)
        )
        self.fc1 = nn.Sequential(
            nn.Linear(in_features=64 * 98, out_features=100),
            nn.ReLU()
        )
        self.fc2 = nn.Sequential(
            nn.Linear(in_features=100, out_features=2)
        )

    def forward(self, src, tar):
        x_src = self.conv1(src)
        x_tar = self.conv1(tar)
        
        x_src = self.conv2(x_src)
        x_tar = self.conv2(x_tar)
        #print(x_src.shape)
        x_src = x_src.reshape(-1, 64 * 98)
        x_tar = x_tar.reshape(-1, 64 * 98)
        
        x_src_mmd = self.fc1(x_src)
        x_tar_mmd = self.fc1(x_tar)
        
        #x_src = self.fc1(x_src)
        #x_tar = self.fc1(x_tar)
        
        #x_src_mmd = self.fc2(x_src)
        #x_tar_mmd = self.fc2(x_tar)
        
        y_src = self.fc2(x_src_mmd)
        
        return y_src, x_src_mmd, x_tar_mmd
    

【域适应】基于深度域适应MMD损失的典型四分类任务实现,电生理信号处理项目实践,机器学习,人工智能,域适应,深度学习,卷积神经网络

代码获取

后台私信;

其他相关域适应问题和代码开发,欢迎沟通和交流。文章来源地址https://www.toymoban.com/news/detail-848701.html

到了这里,关于【域适应】基于深度域适应MMD损失的典型四分类任务实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 神经网络中的损失函数(下)——分类任务

    上文主要介绍了回归任务中常用的几个损失函数,本文则主要介绍分类任务中的损失函数。 为了与回归任务的损失函数形式相统一,此处仅考虑某一条数据的损失函数。 在分类任务中,假设一共有 n n n 个类别。该数据的真实值 Y Y Y 一般用独热编码(只有某一位为1,其余都

    2024年01月17日
    浏览(27)
  • 【深度学习】分类损失函数解析

    在分类任务中,我们通常使用各种损失函数来衡量模型输出与真实标签之间的差异。有时候搞不清楚用什么,下面是几种常见的分类相关损失函数及其 解析,与代码示例 。 二元交叉熵损失(Binary Cross Entropy Loss,BCELoss): torch.nn.BCELoss() 是用于二元分类的损失函数。它将模型

    2024年02月09日
    浏览(40)
  • Pytorch代码入门学习之分类任务(三):定义损失函数与优化器

    目录 一、定义损失函数 1.1 代码 1.2 损失函数简介 1.3 交叉熵误差(cross entropy error) 二、定义优化器 2.1 代码 2.2 构造优化器 2.3 随机梯度下降法(SGD)         神经网络的学习通过某个指标表示目前的状态,然后以这个指标为基准,寻找最优的权重参数。神经网络以某个指标

    2024年02月07日
    浏览(34)
  • 【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

    博主简介: 努力学习的22级计算机科学与技术本科生一枚🌸 博主主页: @Yaoyao2024 每日一言🌼: 勇敢的人,不是不落泪的人,而是愿意含着泪继续奔跑的人。 ——《朗读者》 本系列博客文章是博主本人根据吴恩达老师2022年的机器学习课程所学而写,主要包括老师的核心讲义

    2024年02月19日
    浏览(40)
  • 三 动手学深度学习v2 —— Softmax回归+损失函数+图片分类数据集

    softmax回归 损失函数 1. softmax回归 回归vs分类: 回归估计一个连续值 分类预测一个离散类别 从回归到多类分类 回归 单连续数值输出 自然区间R 跟真实值的误差作为损失 分类 通常多个输出 输出i是预测为第i类的置信度 总结: 2. 损失函数 L2 loss 均方损失 l ( y , y ′ ) = 1 2 ( y −

    2024年02月14日
    浏览(24)
  • 基于PyTorch使用LSTM实现新闻文本分类任务

    PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm=1001.2014.3001.5501 基于PyTorch使用LSTM实现新闻文本分类任务的概况如下: 任务描述:新闻文本分类是一种常见的自然语言处理任务,旨在将新闻文章分为不同的类别,如政治、体育、科技等。 方法:使

    2024年02月09日
    浏览(33)
  • Python深度学习026:基于Pytorch的典型循环神经网络模型RNN、LSTM、GRU的公式及简洁案例实现(官方)

    循环神经网络(也有翻译为递归神经网络)最典型的三种网络结构是: RNN(Recurrent Neural Network,循环神经网络) LSTM(Long Short-Term Memory,长短期记忆网络) GRU(Gate Recurrent Unit,门控循环单元) 理解参数的含义非常重要,否则,你不知道准备什么维度的输入数据送入模型 先

    2023年04月22日
    浏览(29)
  • 论文推荐:基于联合损失函数的多任务肿瘤分割

    以FFANet为主干,加入分类的分支,将模型扩展为多任务图像分割框架,设计了用于分类和分割的联合损失函数。 1、FFANet和分割分支 FFANet作为骨干网络,作为对VoVNet的重新设计和优化,FFANet在骨干网中加入了残差连接,使VoVNet可以学习更多的特性。设计了一种特殊的特征融合

    2023年04月23日
    浏览(30)
  • 清华青年AI自强作业hw6:基于ResNet实现IMAGENET分类任务

    一起学AI系列博客:目录索引 hw6作业为基于ResNet模型,并利用VGG标准模块和GoogleNet中的inception模块对IMAGENET数据集进行20类分类。模型输入图像尺寸为 299*299 ,输出为softmax后的20分类。 观察参考代码发现需要使用IMAGENET处理好后的数据ILSVRC2012_20_tfrecord,由于缺乏实验数据,本

    2024年02月12日
    浏览(22)
  • 深度学习-分类任务---经典网络

    一种典型的用来识别数字的卷积网络是LeNet-5。 1.1 模型结构 1.2 模型结构 LeNet-5共有7层(不包含输入层),每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。 C1层是一个卷积层 输入图片:

    2024年02月19日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包