基于三层BP神经网络的人脸识别

article/2025/8/23 23:47:33

实验四、基于三层BP神经网络的人脸识别
一、 实验要求
采用三层前馈BP神经网络实现标准人脸YALE数据库的识别,编程语言为C系列语言。
二、BP神经网络的结构和学习算法
实验中建议采用如下最简单的三层BP神经网络,输入层为 ,有n个神经元节点,输出层具有m个神经元,网络输出为 ,隐含层具有k个神经元,采用BP学习算法训练神经网络。

BP神经网络的结构
BP网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对BP网络加以训练,网络就具有输入输出对之间的映射能力。
BP网络执行的是有教师训练,其样本集是由形如(输入向量,期望输出向量)的向量对构成的。在开始训练前,所有的权值和阈值都应该用一些不同的小随机数进行初始化。

在这里插入图片描述

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;import javax.imageio.ImageIO;public class ANN {static int B = 16;
//	输入层神经元个数static int N = 2*B*B*2;
//	隐含层神经元个数static int L = B*B;
//	输出层神经元个数static int M = 16;
//	进度控制产生static double yiphxir = 0.001;
//	学习率static double arph = 0.2;static double a = -1.0;static double max = 255;
//	输入层到隐含层的权值static double[][] V = new double[N][L];
//	隐含层到输出层的权值static double[][] W = new double[L][M];
//	隐含层的阈值static double[] fai = new double[L];
//	输出层的阈值static double[] sita = new double[M];static double[][] deltaW = new double[L][M];static double[] deltaSita = new double[M];static double[][] deltaV = new double[N][L];static double[] deltaFai = new double[L];static double[] FE = new double[M];static double[] getImagePixel(String image) {File file = new File(image);BufferedImage bi = null;try {bi = ImageIO.read(file);} catch (IOException e) {e.printStackTrace();}int width = bi.getWidth()/2;int height = bi.getHeight()/2;double[] pixel = new double[N];int cnt = 0;for(int y = height-B; y < height+B; y++) {for(int x = width-B; x < width+B; x++) {int t = bi.getRGB(x, y);t = (t & 0xff);pixel[cnt] = t/max;cnt++;}}return pixel;}static double FS(double x){return 1.0/(1.0+Math.exp(a*x)); }static void init(){for(int i=0; i<N; i++){for(int j=0; j<L; j++){V[i][j] = Math.random()*2.0-1.0;}}for(int j=0; j<L; j++){for(int k=1; k<M; k++){W[j][k] = Math.random()*2.0-1.0;}}for(int j=0; j<L; j++){fai[j] = Math.random()*2.0-1.0;}for(int k=1; k<M; k++){sita[k] = Math.random()*2.0-1.0;}}static boolean trainBP(double[] X, int[] D){double[] H = new double[L];for(int j=0; j<L; j++){double derta = 0.0;for(int i=0; i<N; i++){derta += X[i]*V[i][j];}
//			System.out.print("derta"+Double.toString(derta));
//			System.out.println("    derta-fai="+Double.toString(derta-fai[j]));H[j] = FS(derta+fai[j]);
//			System.out.println(Double.toString(H[j])+" ");}double[] Y = new double[M];for(int k=1; k<M; k++){double derta = 0.0;for(int j=0; j<L; j++){derta += H[j]*W[j][k];}
//			System.out.print("derta"+Double.toString(derta));
//			System.out.println("    derta-sita="+Double.toString(derta-sita[k]));Y[k] = FS(derta+sita[k]);
//			System.out.print(Double.toString(Y[k])+" ");}
//		System.out.println();double[] deltaK = new double[M];double E = 0.0;for(int k=1; k<M; k++){E += (D[k] - Y[k])*(D[k] - Y[k]);deltaK[k] = (D[k]-Y[k])*Y[k]*(1-Y[k]);}
//		System.out.print("E=");
//		System.out.println(E/2);if(E/2 < yiphxir) return true;double[] deltaJ = new double[L];for(int j=0; j<L; j++){double beta = 0.0;for(int k=1; k<M; k++){beta += deltaK[k]*W[j][k];}deltaJ[j] = H[j]*(1-H[j])*beta;}for(int j=0; j<L; j++){for(int k=1; k<M; k++){deltaW[j][k] = arph*deltaK[k]*H[j];
//				deltaW[j][k] = (arph/(1+L))*(deltaW[j][k]+1)*deltaK[k]*H[j];W[j][k] += deltaW[j][k];}}for(int k=1; k<M; k++){deltaSita[k] = arph*deltaK[k];
//			deltaSita[k] = (arph/(1+L))*(detaSitla[k]+1)*deltaK[k];sita[k] += deltaSita[k];}for(int i=0; i<N; i++){for(int j=0; j<L; j++){deltaV[i][j] = arph*deltaJ[j]*X[i];
//				deltaV[i][j] = (arph/(1+N))*(deltaV[i][j]+1)*deltaJ[j]*X[i];V[i][j] += deltaV[i][j];}}for(int j=0; j<L; j++){deltaFai[j] = arph*deltaJ[j];
//			deltaFai[j] = (arph/(1+N))*(deltaFai[j]+1)*deltaJ[j];fai[j] += deltaFai[j];}return false;}static int BP(double[] X){int ans = 0;double[] H = new double[L];for(int j=0; j<L; j++){double derta = 0.0;for(int i=0; i<N; i++){derta += X[i]*V[i][j];}H[j] = FS(derta-fai[j]);}double[] Y = new double[M];for(int k=1; k<M; k++){double derta = 0.0;for(int j=0; j<L; j++){derta += H[j]*W[j][k];}Y[k] = FS(derta-sita[k]);}double min = Double.MAX_VALUE;for(int n=1; n<M; n++){double E = 0.0;int[] D = new int[M];D[n] = 1;for(int k=1; k<M; k++){E += Math.abs((D[k] - Y[k])*(D[k] - Y[k]));}FE[n] = 1.0/Math.exp(E/2.0);if(E/2 < min){min = E/2;ans = n;}}return ans;}@SuppressWarnings("resource")public static void main(String[] args) {init();int temp = 0;while(temp < 100){int t = 1;while(t <= 11){int ca = 1;while(ca < M){
//					System.out.println(t);
//					System.out.println(ca);String imagePath;if(ca >= 10){
//						imagePath = "C:\\Users\\DELL\\Downloads\\AAII\\src\\image\\subject01_10.bmp";imagePath = "C:\\Users\\DELL\\Downloads\\AAII\\src\\image\\"+"subject"+Integer.toString(ca)+"_"+Integer.toString(t)+".bmp";}else imagePath = "C:\\Users\\DELL\\Downloads\\AAII\\src\\image\\"+"subject0"+Integer.toString(ca)+"_"+Integer.toString(t)+".bmp";double[] X = getImagePixel(imagePath);int[] D = new int[M];D[ca] = 1;boolean flag = trainBP(X, D);if(flag) break;ca++;}t++;}temp++;}Scanner in = new Scanner(System.in);while(true){System.out.println("请输入subject(t1)和_(t2):");String t1 = in.next();String t2 = in.next();String imagePath = "C:\\Users\\DELL\\Downloads\\AAII\\src\\image\\"+"subject"+t1+"_"+t2+".bmp";int ans = BP(X);System.out.println("(subject01~subject15)的匹配率如下:");for(int i=1; i<M; i++){System.out.println("subject"+Integer.toString(i)+":"+String.format("%g", FE[i]*100)+"%");}System.out.println();System.out.print("综合结果为subject");System.out.println(ans);System.out.println();}}
}

图片地址:https://download.csdn.net/download/qq_43179428/19880190


http://chatgpt.dhexx.cn/article/AdpRljMt.shtml

相关文章

神经网络笔记1-三层BP神经网络

神经网络笔记1-三层BP神经网络 神经网络性质简介信息正向传输预期神经网络的获得误差反向更新&#xff08;输出层→隐藏层&#xff09;误差反向更新&#xff08;隐藏层→输入层&#xff09; 伪代码实现训练函数测试函数&#xff0c;用训练好的神经网络预测 手写数字识别举例识别…

BP神经网络的梯度公式推导(三层结构)

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一. 推导目标 1.1 梯度公式目标 1.2 本文梯度公式目标 二. 网络表达式梳理 2.1 梳理三层BP神经网络的网络表达式 三. 三层BP神经网络梯度推导过程 3.1 简化推导目标 3.2 输出层权重…

三层架构的搭建

目录 实验拓扑&#xff1a; 实验要求&#xff1a; 使用的技术有&#xff1a; ospf技术、NAT技术、静态、DHCP、VRRP 、STP、 VLAN、TRUNK 、 access接口模式、 以太网中继Eth-Trunk(华为) 技术、vlan管理技术 实验思路&#xff1a; 实验过程&#xff1a; IP地址的配置&am…

tfs路径映射已存在

环境&#xff1a;VS2019、Win10 最近公司服务器更换&#xff0c;想要将tfs项目映射到原来的工作区&#xff0c;提示“tfs-路径 XXX 已在工作区 XXX;XXX 中映射”&#xff0c;通过网络查找资料得知&#xff0c;需要修改Team Foundation的配置文件&#xff1a; 1.找到目录&#x…

TFS2012 权限设置

环境&#xff1a; TFS2012 win7 1.安装好TFS 2.创建系统用户组&#xff1a; TFSAdmins、TFSDevs、TFSUsers 分别为TFS管理人员组、TFS开发人员组、TFS普通用户组。 如下图&#xff1a; 这样我们在TFS的权限设置里&#xff0c;都只针对这三个组设权限&#xff0c;不会具体到…

TFS学习

一、TFS是什么 TFS全称是 Team Foundation Server&#xff0c;是 Microsoft 提供的 源代码管理、数据收集、报告和项目跟踪的平台工具。 主要功能 版本管理&#xff1a;工作区&#xff08;workspace&#xff09;、变更集&#xff08;changeset&#xff09;、标签并行开发支持…

tfs java_TFS (Team Foundation Server) 2013集成Maven构建

Team Foundation Server原生就支持跨平台的构建&#xff0c;包括Ant和Maven两种构建方式。通过配置构建服务器&#xff0c;连接TFS源代码库&#xff0c;可以实现持续集成构建&#xff0c;自动检测代码库健康状况&#xff0c;进而实现自动测试和部署。本文以Maven为例&#xff0…

Azure DevOps Server 2019 (TFS)安装教程

&#xff08;1&#xff09;安装教程&#xff1a; Azure DevOps Server 2019 (TFS&#xff09;安装教程 - danzhang - 博客园 Azure DevOps Server 的安装教程_躺平佛系周大侠的博客-CSDN博客 1.配置数据库&#xff0c;使用默认的sql express 2.搜索配置&#xff0c; 使用默认…

TFS用户组说明和用户权限配置过程

一、TFS默认用户组的说明 服务器级别用户组&#xff1a; 1、TFS服务器/Team Foundation Valid Users&#xff1a;可以访问TFS服务器。 2、TFS服务器/Team Foundation Licensed Users&#xff1a;可以连接TFS服务器。这个组只在 Team Foundation Server Workgroup Edition 版本…

linux系统tfs安装,Jenkins使用TFS部署

之前发表过一篇Jenkins的文章《使用Jenkins部署.Net应用程序》&#xff0c;里面是使用GIT做的版本管理&#xff0c;今天更新下使用TFS做版本管理。 首先在插件管理中搜索tfs&#xff0c;我这里因为已经装了&#xff0c;所以在已安装列表里&#xff0c;没装的话在可选插件列表中…

TFS淘宝分布式文件核心存储引擎源码架构剖析实现

这里写目录标题 相关背景介绍相关设计思路介绍项目基础文件系统接口扇区文件结构关于inode为什么淘宝不用小文件存储淘宝网为什么不用普通文件存储海量小数据&#xff1f; 设计思路关键数据结构哈希表 代码日志mmp_file.hmmap_file.cppfile_op.hmain_mmap_op_file.cppindex_han…

webstorm TFS 插件的安装与使用

翻看网上帖子&#xff0c;有直接在webstrom的Plugins下载TFS插件的&#xff0c;很遗憾&#xff0c;同样的操作我始终搜索不到&#xff0c;跟同事要了现成的安装包 点击这里下载 1、解压后&#xff0c;放到websotrom的plugins文件夹里 2、重启ws&#xff0c;点击 File》Setting…

TFS映射关系出错的几种

服务器更换 开发小组更换了一台新的 TFS 服务器&#xff0c;旧的 TFS 服务器停止使用。但从客户端 VS2005 连接到新的服务器&#xff0c;并下载源码到本地原来工作的文件夹时&#xff0c;出现错误提示&#xff0c;说本地文件夹已被映射到了旧的服务器上&#xff0c;不能从新服…

IDEA安装TFS插件

现在在Plugins已经搜不到TFS插件了&#xff0c;只能在官网TFS - IntelliJ IDEs Plugin | Marketplace 下载对应的版本zip包&#xff0c;采用Install Plugins From Diak方式安装&#xff0c; 如果出现如下问题&#xff0c;那就换个版本试试看。 换个版本之后&#xff1a; 重启之…

TFS 操作指令

最近厂商来公司做项目&#xff0c;人员来来往往的很多&#xff0c;有人签出后没有签入就走了&#xff0c;只好想办法强制解除。从网上找到了解决办法&#xff0c;但照着做出了好多错&#xff0c;特此记录。 1.强制解除被独占签出的文件必须使用命令工具tf.exe 该文件在C:\Pro…

tfs java_Java SDK for TFS

Java SDK for TFS 05/19/2011 2 分钟可看完 本文内容 So you don’t use Visual Studio as your main IDE and instead use Eclipse with Team Explorer Everywhere but want to tailor TFS to suite your (and/or your teams) needs. Not a problem as with this new SDK it’…

TFS工作项模板自定义指南

概述 TFS 内置有CMMI模板、敏捷模板等过程模板&#xff0c;但是为了方便团队管理&#xff0c;TFS 提供自定义过程模板的功能。每个团队可以根据需要自定义模板界面、字段、流程等内容。 本文档将会介绍如何自定义过程模板&#xff0c;以及制定的要求。 环境准备 获取修改权限…

vs 的 tfs 账号更改

vs 更换账户&#xff0c;可能不常用&#xff0c;当时有时特殊化&#xff0c;需要进行账号更改&#xff0c;但是打开 vs 后发现没有地方可以注销账户的&#xff0c;为什么呢&#xff1f; 原因是这样的&#xff0c;当我们第一次登陆账号时&#xff0c;会生成一个凭据到我们的计算…

TFS的原理及应用

最近的一个项目由于原先的nas服务停了&#xff0c;所以没有办法&#xff0c;只能迁移到TFS上。这本来是一个内部的分享的。TFS本身也是开源了&#xff0c;所以就拿出来分享一下吧。 这里大部分内容出自TFS的开源网站及内部的wiki&#xff0c;下面是TFS的项目 TFS开源项目&…

TFS(Taobao File System)

简介 TFS&#xff08;Taobao !FileSystem&#xff09;是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统&#xff0c;主要针对海量的非结构化数据&#xff0c;它构筑在普通的Linux机器集群上&#xff0c;可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海…