python实现模糊神经网络(pytorch版)

news2024/11/24 10:38:31

1 理论

模糊神经网络是一种基于模糊逻辑的神经网络模型,其主要用于处理模糊信息和不确定性的问题。模糊神经网络可以将输入数据映射到一个模糊集合中,然后通过一系列的模糊规则进行求解,最终输出一个模糊集合。

模糊神经网络的基本原理是将输入数据从实数域映射到模糊集合中,然后利用一组模糊规则对其进行处理,最终输出一个模糊集合。模糊集合是一种介于0和1之间的模糊值,代表了某个事物的隶属度。在模糊神经网络的训练过程中,通常使用反向传播算法来更新权重和偏置。

模糊神经网络的一般过程包括以下步骤:

1.确定输入变量和输出变量。输入变量是神经网络的输入特征,输出变量是神经网络的输出结果。

2.将输入变量映射到模糊集合中。这个过程称为模糊化。模糊化可以使用三角函数、梯形函数等不同的方法来实现。

3.确定模糊规则。模糊规则是指将输入变量和输出变量之间的关系用一些语言规则进行描述。通常使用的语言规则形式为:“如果输入变量A是模糊集合X1,且输入变量B是模糊集合X2,那么输出变量C是模糊集合Y1”。

4.基于模糊规则进行推理。推理是指将输入的模糊集合根据模糊规则进行处理,生成模糊输出结果。

5.将模糊输出结果反模糊化。反模糊化是指将模糊输出结果转化为实际的数值结果。反模糊化可以使用各种方法,如平均值法、重心法等。

6.利用反向传播算法进行训练。反向传播算法是一种用于训练神经网络的常用方法,通过计算误差梯度来更新权重和偏置,以提高神经网络的准确性。

模糊神经网络的应用非常广泛,包括模糊控制、模糊分类、模糊聚类等方面。例如,模糊控制可以用于控制温度、湿度等物理量,模糊分类可以用于图像识别、语音识别等领域,模糊聚类可以用于数据挖掘、模式识别等方面。

2 pytorch实现


# https://github.com/kenoma/pytorch-fuzzy
import torch
import torch.nn as nn
import numpy as np
from torch import Tensor

class FuzzyLayer(torch.nn.Module):

    def __init__(self, initial_centers, initial_scales, trainable=True):
        """
        mu_j(x,a,c) = exp(-|| a . x ||^2)
        """
        super().__init__()

        if np.shape(initial_centers) != np.shape(initial_scales):
            raise Exception("initial_centers shape does not match initial_scales")

        sizes = np.shape(initial_centers)
        self.size_out, self.size_in, *_ = sizes

        diags = []
        for s,c in zip(initial_scales, initial_centers):
            diags.append(np.insert(np.diag(s), self.size_in, c, axis = 1))
        a = torch.FloatTensor(np.array(diags))

        const_row = np.zeros(self.size_in+1)
        const_row[self.size_in] = 1
        const_row = np.array([const_row]*self.size_out)
        const_row = np.reshape(const_row, (self.size_out, 1, self.size_in+1))
        self.c_r = nn.Parameter(torch.FloatTensor(const_row), requires_grad=False)
        self.c_one = nn.Parameter(torch.FloatTensor([1]), requires_grad=False)
        self.A = nn.Parameter(a, requires_grad=trainable) 

    @classmethod
    def fromdimentions(cls, size_in, size_out, trainable=True):
        initial_centers = torch.randn((size_out, size_in))
        initial_scales = torch.ones((size_out, size_in))
        return cls(initial_centers, initial_scales, trainable)

    @classmethod
    def fromcenters(cls, initial_centers, trainable=True):
        initial_centers =  np.multiply(-1, initial_centers)
        sizes = np.shape(initial_centers)
        initial_scales = torch.ones(sizes)
        return cls(initial_centers, initial_scales, trainable)

    def forward(self, input: Tensor) -> Tensor:
        batch_size = input.shape[0]
        ta = torch.cat([self.A, self.c_r],1)
        repeated_one = self.c_one.repeat(batch_size,1)
        ext_x = torch.cat([input, repeated_one], 1)
        #reshaped_x = torch.reshape(ext_x, (1, self.size_in+1))
        tx = torch.transpose(ext_x, 0, 1)
        mul = torch.matmul(ta, tx)
        exponents = torch.norm(mul[:,:self.size_in], p=2, dim=1)
        memberships = torch.exp(-exponents)
        return memberships.transpose(0,1)

demo的分类结果:
在这里插入图片描述
在这里插入图片描述
还有个自适应模糊神经网络,感兴趣可以看看:

https://github.com/twmeggs/anfis

参考:https://fuxi.163.com/database/980

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMD GPUs - Radeon™ PRO W7900与NVIDIA 4000系列GPU性能

文心一言 RTX 4090的性能高于AMD Radeon PRO W7900。 RTX 4090具有760亿个晶体管、16384个CUDA核心和24GB高速镁光GDDR6X显存,在4K分辨率的游戏中持续以超过100FPS运行。RTX 4090采用全新的DLSS 3技术,相比3090TI,性能提升可达2~4倍&#x…

CSS实现元素边框渐变动画

前言: 边框流动动画是一种非常常见的效果,能够让网页看起来更加生动有趣。通过使用 CSS3,我们可以轻松地实现这种动画效果。本文将介绍如何使用 CSS3 实现边框流动效果,下面一起来看看吧。 示例图:边框是动画持续变化的…

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络 摘要引言方法 MCRNet_ Multi-level context refinement network for semantic segmentation in breast ultrasound imaging 摘要 由于对比度差、目标边界模糊和大量阴影的不利影响,乳腺超声成像中…

文献阅读:通过 NeuronChat 从单细胞转录组推断神经元-神经元通信

文献介绍 「文献题目」 Inferring neuron-neuron communications from single-cell transcriptomics through NeuronChat 「研究团队」 聂青(加利福尼亚大学欧文分校) 「发表时间」 2023-02-28 「发表期刊」 Nature Communications 「影响因子」 16.6…

mysql8 功能特点

1.查询缓存 删除了 2.secondary engine 设置: MySQL默认的存储引擎是InnoDB,而引入Secondary Engine,用来实现同时支持多引擎,在同一个MySQL Server上挂多个存储引擎,在支持InnoDB的同时,还可以把数据存放…

CommunityToolkit.Mvvm----配置

一、介绍: CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit.Mvvm)是一个现代、快速和模块化的 MVVM 库。 它是 .NET 社区工具包的一部分,围绕以下原则生成: 独立于平台和运行时 - …

Pandas | value_counts() 的详细用法

value_counts() 函数得作用 用来统计数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据指定得参数返回排序后结果。 返回得是Series对象 value_counts(values,sortTrue, ascendingFalse, normalizeFal…

《Linux运维实战:达梦DM8数据库之基本操作》

一、创建表空间 1.1、使用客户端工具创建 1、使用 SYSDBA 用户登录 DM 管理工具。右键表空间模块,点击【新建表空间】,如下图所示: 2、可根据项目需要,修改表空间文件、路径、大小、是否自动扩充、扩充上限等信息,如下…

网络类型整理

1、点到点 :在一个网段内只能存在,两个物理节点 MA-多路访问 -- 在一个网段内物理节点的数量不限制 MA--- BMA NBMA 2、BMA -- 广播型多路访问 3、NBMA--非广播型多路访问 注:不同网络类型实际为不同的数据链路层技术;由于二…

力扣--对链表进行插入排序--147

该题是不带哨兵位的!!! 目录 该题是不带哨兵位的!!! 首先先进行带哨兵位的代码展示: 但是就提论题,力扣上的这道题,没有明确说明附带哨兵位,我们一律按照…

11-SpringSecurity:Session共享,菜鸟驿站java面试题

pom依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session-data-redis org.projectlombok lombok …

1.java 安装

操作步骤 下载: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html1 通过Xftp将下载下来的jdk上传到指定虚拟机上传到/usr目录下 2 通过Xshell连接到虚拟机,执行如下命令,解压文件: $ tar zxvf jdk-8u…

算法沉淀 —— 动态规划篇(简单多状态dp问题下)

算法沉淀 —— 动态规划篇(简单多状态dp问题下) 前言一、买卖股票的最佳时机含冷冻期二、买卖股票的最佳时机含手续费三、买卖股票的最佳时机 IV 前言 几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此 1.、状态表示…

概率论经典题目-二维随机变量及分布--由概率密度求分布函数和概率

解答: 由概率密度函数求解分布函数的公式可知: 辅助图形加以确定积分上下限

LCX端口转发

LCX介绍 LCX是一款端口转发工具,分为Windows版和Linux版,Linux版本为PortMap。LCX有端口映射和端口转发两大功能,例如当目标的3389端口只对内开放而不对外开放时,可以使用端口映射将3389端口映射到目标的其他端口使用&#xff1b…

k8s1.28.8版本配置Alertmanager报警方式(邮件,企业微信)

文章目录 总结部署流程 Alertmanager 三大核心1. 分组告警2. 告警抑制3. 告警静默 报警过滤静默通知方案一:方案二: 抑制报警规则案例一 参考文档 自定义路由告警,分来自不同路由的告警,艾特不同的人员进行区分修改 alertmanager …

Spark-Scala语言实战(9)

之前的文章中,我们学习了如何在spark中使用RDD方法的flatMap,take,union。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战&am…

keepalived+LVS高可用部署

目录 一.两台设备(2.130和2.133)作为调度器,前主后备 1.部署keepalived 2.修改配置文件准备启动 3.配置keepalived的系统日志并启动 二.模拟调度器掉点和web服务进程丢失 1.调度器掉点 2.当类似于httpd这种网站服务掉点 三.以三种健康…

【A-008】基于SSH的员工信息管理系统(含论文)

员工信息管理系统主要功能如下: (1)员工方面: ①人事管理:能够看到自己的基本信息,对自己的合同进行下载,可以看公司的培训信息; ②招聘管理:查看企业的招聘信息,包括应聘者&#x…

基于SpringBoot和Vue的学生笔记共享平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的学生笔记共享平台的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&…