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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软最新10道算法岗面试题!

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

YOLOv9改进策略 :原创自研 | 自研独家创新BSAM注意力 ,基于CBAM升级

💡💡💡本文改进内容: 提出新颖的注意力BSAM(BiLevel Spatial Attention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的 BiLevel Attention+Spartial Attention 1)作为注意力BSAM使用; 推荐指数:五星 …

分区合并风险大,数据恢复有妙招

分区合并,是计算机磁盘管理中的一个常见操作,旨在通过整合相邻的分区来创建一个更大的逻辑分区,从而更有效地利用磁盘空间。这种操作看似简单,但实则蕴含着不小的风险。一旦操作不当或遇到意外情况,很可能导致数据丢失…

微信伴侣WechatTweak 中文集成版【微信防撤回、多开助手】

微信伴侣WechatTweak是一款专为Mac平台设计的微信客户端插件,旨在提升微信使用体验。它拥有多种实用功能,如防止消息撤回、微信无限多开、免二次认证登录等,让用户能够更轻松、安全地管理微信账号和消息。同时,微信伴侣WechatTwea…

刷力扣必备ImageMagick: 强大的图像处理套件

👤作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 作者专栏每日更新: 我将在我的专栏里面的每个算法题里面通过ImageMagick把运行步骤通过动态图…

智能指针(C++11)

智能指针的使用 问题 我们在平时写程序的时候,有些情况下不可避免地会遇见内存泄露的情况。内存泄露是指因为疏忽或错误,造成程序未能释放已经不再使用的内存的情况。例如下面这个例子,内存泄漏不易被察觉。 int div() {int a, b;cin >…

P28—P31:变量

P28-变量的定义 什么是变量? 从本质上来说,变量就是一块内存空间,而这块内存空间有数据类型、名字、字面值。变量包含三部分:数据类型、名字、字面值(数据)变量是内存中存储的基本单元。 数据类型的作用&a…

C/C++游戏编程实例-飞翔的小鸟

飞翔的小鸟游戏设计 首先需要包含以下库&#xff1a; #include<stdio.h> #include<windows.h> #include<stdlib.h> //包含system #include<conio.h>设置窗口大小&#xff1a; #define WIDTH 50 #define HEIGHT 16设置鸟的结构&#xff1a; struct …

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

什么是服务雪崩?什么是服务限流?

服务雪崩效应&#xff1a;因服务提供者的不可用而导致服务调用者的不可用&#xff0c;并且这种情况不断的衍生方法&#xff0c;从而导致整个系统崩溃的过程&#xff0c;就是服务雪崩效应。 解决方式&#xff1a; 熔断机制&#xff1a;当一个服务挂了&#xff0c;被影响的服务要…

Django(二)-搭建第一个应用(1)

一、项目环境和结构 1、项目环境 2、项目结构 二、编写项目 1、创建模型 代码示例: import datetimefrom django.db import models from django.utils import timezone# Create your models here.class Question(models.Model):question_text models.CharField(max_length2…

图解分布式定时器从零实现 | go语言(一)

参考 https://zhuanlan.zhihu.com/p/600380258 https://xie.infoq.cn/article/aaa353c9df6641eb1b09e6f36 https://www.luozhiyun.com/archives/458 前言 在许多业务场景中,我们需要使用定时器来执行一些定期任务或操作。以下是一些常见的使用场景: 订单管理 当订单一直处于未…

数据结构——lesson12排序之归并排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

C++2D原创我的世界1.00.3版本上市!!!

我很郁闷&#xff0c;为什么就是整不了昼夜交替啊喂&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 虽然这看上去很简单&#xff0c;但做起来要我命&#xff01;&#xff01;&#xff01; 优化过后总共1312行&#xff0c…

Linux:内核源代码角度看文件和Socket

文章目录 文件和Socket 文件和Socket 在之前写的网络服务&#xff0c;它们的本质其实就是一个进程&#xff0c;而对于每一个打开的文件来说&#xff0c;都要有一个自己对应的文件描述符&#xff0c;其中会默认打开对应的012&#xff0c;作为标准输入标准输出标准错误&#xff…

数据结构——lesson13排序之计数排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

如何简化多个 if 的判断结构

多少算太多&#xff1f; 有些人认为数字就是一&#xff0c;你应该总是用至少一个三元运算符来代替任何单个 if 语句。我并不这样认为&#xff0c;但我想强调一些摆脱常见的 if/else 意大利面条代码的方法。 我相信很多开发人员很容易陷入 if/else 陷阱&#xff0c;不是因为其…

ThreadLocal的基本使用

一、ThreadLocal的介绍 ThreadLocal 是 Java 中的一个类&#xff0c;它提供了线程局部变量的功能。线程局部变量是指每个线程拥有自己独立的变量副本&#xff0c;这些变量在不同的线程中互不影响。ThreadLocal 提供了一种在多线程环境下&#xff0c;每个线程都可以独立访问自己…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(4)

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 PS人物数码照片处理技法视频教程 https://www.…

武汉星起航:一站式跨境电商服务引领者,专业高效助力客户出海

武汉星起航电子商务有限公司&#xff0c;坐落于华中地区的商业核心地带——湖北武汉&#xff0c;自公司成立以来&#xff0c;便以提供一站式跨境电商服务为核心发展&#xff0c;致力于为广大客户提供专业、高效、全面的出海解决方案。凭借5对1服务体系、ERP软件授权、中转仓服务…