精华内容
下载资源
问答
  • 应用卷积神经网络乳腺癌组织病理图像进行分类

    万次阅读 热门讨论 2019-01-23 18:29:29
    在这里给大家分享一篇关于用深度学习进行乳腺癌识别的论文(原文地址),翻译成了中文以便大家快速学习,中间难免有疏忽遗漏的地方,请大家谅解。 深度医疗(2) -乳腺癌诊断识别 1. 介绍 癌症是世界上一个巨大的...

    在这里给大家分享一篇关于用深度学习进行乳腺癌识别的论文(原文地址),翻译成了中文以便大家快速学习,中间难免有疏忽遗漏的地方,请大家谅解。

    深度医疗(2) -乳腺癌诊断识别

    1. 介绍

    癌症是世界上一个巨大的公共卫生问题。根据世界卫生组织(世卫组织)的一部分,国际癌症研究机构(IARC)的数据,2012年有820万人死于癌症,预计到2030年将有2700万新的癌症病例发生。在癌症类型中,乳腺癌(BC)是女性第二常见的癌症(皮肤癌除外)。此外,与其他类型的癌症相比,BC的死亡率非常高。即使面对对BC进展的分子生物学的理解和新的相关分子标记的发现方面的最新进展,组织病理学分析仍然是BC诊断最广泛使用的方法。尽管诊断成像技术取得了重大进展,但病理学家还是通过在显微镜下对组织学样本进行目视检查,从而进行最终的BC诊断(包括分级和分期)。

    图像处理和机器学习技术的最新进展可通过计算机进行辅助检测/诊断(CAD/CADX)系统,以帮助病理学家从客观性和一致性上提高诊断的效率。组织病理学图像分类包含不同的组织病理学模式,与被分析组织的非癌或癌状态相对应,癌症自动辅助诊断是图像分析系统的首要目标。这类系统的主要挑战是处理组织病理学图像固有的复杂性。

    癌症诊断的自动成像处理作为一个研究课题已经探索了40多年,但由于要分析的图像的复杂性,仍然具有挑战性。例如,Kowal等人比较和测试不同的核分割算法,这些算法在500张图像的数据集上将病例分为良性或恶性,最终的精确度范围从96%到100%。Filipczuk等人提出了一种基于细针活检细胞学图像分析的BC诊断系统,以区分良恶性。使用四种不同的分类器,用25维特征向量训练,他们在737张图像上达到了98%的性能。George等人提出了一种基于细胞学图像核分割的BC诊断系统。使用不同的机器学习模型,如神经网络和支持向量机,他们在92幅图像的数据集的准确率从76%到94%。另外还有提出带拒绝选项的级联方法。在级联的第一级中,作者希望解决容易的情况,而硬的情况则发送到第二级,在第二级中使用更复杂的模式分类系统。他们在以色列理工学院(Israel Institute of Technology)提出的数据库上评估了所提议的方法,该数据库由361张图像,达到97%的可靠性结果。

    最近大多数与BC分类相关的工作都集中在整体滑动成像(WSI)上。然而,广泛采用WSI和其他形式的数字病理学仍然面临着一些障碍,如实施和操作该技术的成本高、大量临床程序的生产力不足、与技术相关的固有问题、未解决的监管问题以及病理学家的“文化阻力”。

    大多数关于BC组织病理学图像分析的工作都是在小型数据集上进行的,而这些数据集通常是科学界无法获得的。为了缓解这种差距,斯潘诺尔等人介绍了一个由对82名患者采集的7909个乳腺组织病理学图像组成的数据集。在同一项研究中,作者评估了六种不同的纹理描述符和不同的分类器,并报告了一系列实验,根据图像放大系数的不同,准确率在80%到85%之间。不可否认的是,纹理描述符可以为训练分类器提供良好的表现。然而,一些研究人员主张,当前机器学习方法的主要弱点恰恰在于这一特征工程步骤。对他们来说,机器学习算法应该通过能够从数据中提取和组织识别信息来减少对特征工程的依赖,换句话说,应该能够表示学习。

    表示学习的概念并不新鲜,但由于图形处理单元(GPU)的出现和普及,它最近才作为一种可行的替代方案出现,后者能够以相对较低的成本提供较高的计算吞吐量,这是通过其大规模并行架构实现的。在不同的方法中,卷积神经网络(CNN)在不同的模式识别问题中得到了广泛的应用,以获得最先进的结果。在纹理分类的情况下,没有不同。Hafemann等人已经表明,对于微观和宏观纹理的图像,CNN能够超越传统的纹理描述符。此外,传统的病理图像分类任务特征提取方法需要大量的努力和有效的专家领域知识,经常导致高度定制的解决方案,针对这个问题,在其他情况下几乎不适用。

    在此基础上,我们对BC组织病理图像分类问题进行了深入的研究。除了评估不同的CNN架构外,我们还研究了不同的处理高分辨率纹理图像的方法,而不改变用于低分辨率图像的CNN架构。对提出的Breakhis数据集进行的一系列综合实验表明,CNN比能获得的最佳结果还能获得更好的结果。同时,通过使用简单的融合规则(如max、product和sum)组合不同的CNN,可以获得更好的性能。

    本文第二部分简要介绍了breakhis数据库。第三节简要介绍了使用CNN进行深入学习。第四节描述了我们实验中使用的CNN的架构。第五节报告我们的实验并讨论我们的结果。最后,第六部分总结了本文的工作,为进一步的研究提供了一些见解。

    2. BREAKHISDATABASE

    Breakhis数据库包含良性和恶性乳腺肿瘤的显微活检图像。通过2014年1月至2014年12月的临床研究收集图像。在这段时间内,临床症状为BC所有患者都被邀请到巴西P&D实验室参与研究。机构审查委员会批准了这项研究,所有患者都给予了书面知情同意。所有的数据都是匿名的。

    样本来自乳腺组织活检幻灯片,用苏木精和伊红(HE)染色。样本通过外科(开放式)活检(SOB)采集,能用于组织学研究,并由P&D实验室的病理学家标记。本工作中使用的制备程序是标准石蜡工艺,广泛应用于临床常规。主要目的是保存原始组织结构和分子组成,以便在光学显微镜下观察。完整的制备程序包括固定、脱水、清除、渗透、嵌入和修剪等步骤。为了安装在载玻片上,使用切片机切割约3微米的部分。染色后,用玻璃盖玻片覆盖各部分。然后解剖病理学家通过显微镜下组织切片的视觉分析来识别每张载玻片中的肿瘤区域。每个病例的最终诊断由经验丰富的病理学家作出,并通过免疫组化(IHC)分析等补充检查予以确认。

    采用奥林巴斯BX-50系统显微镜,将放大倍率为3.3倍的中继透镜与三星数码彩色相机SCC-131AN耦合,从乳腺组织切片中获取数字化图像。图像是在3通道RGB(红-绿-蓝)真彩(24位色深,每个色通道8位)色空间中使用放大系数40X,100 X,200 X,400 X获得的,对应于物镜4 X,10 X,20 X,40 X。

    图1

    图1显示了从含有恶性肿瘤(乳腺癌)的乳腺组织的单张载玻片上获取的四张图像,放大倍数分别为(a)40倍,(b)100倍,(c)200倍和(d)400倍。突出显示的矩形(仅为说明目的而手动添加)是病理学家选择的感兴趣的区域,将在下一个更高的放大倍率中详细说明。迄今为止,该数据库由7909张图像组成,分为良性和恶性肿瘤。表一总结了图像分布。

    表1

    3. CNN用深度学习方法

    基于视觉内容的图像分类,尤其是组织病理切片的显微图像,是一项具有挑战性的任务,面临着诸如通常大量的层间变异、结构形态多样性导致的丰富的几何结构和复杂的纹理等问题。图2显示了组织病理学图像中的典型复杂纹理。深度学习探索了直接从输入数据中学习功能的可能性,避免了手工制作的功能。深入学习的关键概念是发现多个层次的表示,目的是更高层次的特征表示更抽象的数据语义。卷积神经网络作为一种特殊的深度学习技术,在图像分类问题上取得了成功,包括医学图像分析。总之,CNN由堆叠在一起的多个可训练层级组成,随后是一个监督分类器,一组名为特征映射的数组表示每个阶段的输入和输出。输入可以是图像、音频和视频等信号。例如,考虑到彩色图像,在输入端,每个特征映射都是一个二维数组,存储输入图像的颜色通道。输出由一个集合数组组成,其中每个特征映射表示在相关输入位置提取的特定特征。

    图2

    一个深网是通过输入信息并让它一层一层地计算,以生成最终的输出结果,与正确的答案进行比较来训练的。在计算输出的错误之后,这个错误通过反向传播向后流过网络。在每后退一步时,模型参数都会调整到一个试图减少误差的方向。这个过程会扫过改进模型的数据。通常情况下,training是一个迭代过程,需要多次传递输入数据,直到模型收敛。

    用于构建CNN体系结构的层主要有三种类型:卷积层、池层和全连接层。通常,一个完整的CNN体系结构是通过堆叠其中的几个层获得的。图3显示了典型的CNN体系结构的一个例子,它有两个特征阶段。

    图3

    在CNN中,关键的计算是特征检测器与输入信号的卷积。卷积层计算连接到输入中局部区域的神经元的输出,每个神经元计算其权重和输入体积中连接的区域之间的点积。与输入卷积的权值集称为滤波器或内核。每个过滤器在空间上都很小(宽度和高度),但会延伸到输入卷的整个深度。对于图像等输入,典型的滤波器是小区域(例如,3×3、5×5或8×8),每个神经元只连接到前一层的这个区域。权重在神经元之间共享,从而引导过滤器学习图像任何部分中出现的频繁模式。过滤器应用之间的距离称为跨距。是否跨步超参数小于滤波器大小,卷积应用于重叠窗口。

    像图6中的学习过滤器(也称为功能图或激活图)一样,对一组过滤器进行卷积可以改进表示:在CNN的第一层,功能从单个像素变成简单的原语,如水平和垂直的线、圆和颜色块。与传统的单通道图像处理过滤器不同,这些CNN过滤器是通过所有输入通道计算的。由于其平移不变性,卷积滤波器在任何检测到特征的地方都会产生高响应。

    图6

    通常在两个连续的卷积层之间插入池(子采样)层。这一实践的主要目的是逐步减少空间大小的表示。因此,减少网络所需的参数和计算的数量有助于在过度装配控制中。池化层在空间上对卷进行采样,独立于输入卷的每个深度切片。因此,pool操作符会沿宽度和高度调整输入的大小,从而放弃激活。在实践中,将窗口函数应用于输入补丁并计算该邻域中的最大值的max pooling函数得到了更好的结果。但是,池化单元可以执行其他功能,如归一化或平均池。

    在一个全连接的层中,神经元与前一层中的所有激活都有完全连接,它们的激活可以通过矩阵乘法和偏差偏移来计算。这种类型的层在常规神经网络中是标准的。最后一个全连接的层保持净输出,它是一个概率分布。

    4. 运用目前存在的深度神经网络架构

    为了从breakhis数据集中对图像进行分类,我们评估了一些以前存在的深度神经网络结构。我们从Lenet开始,它属于CNN的一种,擅长数字分类任务。然而,在所评估的组织病理学图像上,Lenet分类性能明显低于我们文章开头提到的分类性能结果,达到约72%的准确性。因此,我们选择了一个更为复杂的模型,专门设计用于对彩色图像进行分类。在一些测试中,表现出最佳性能的模型是基于Alexnet的变体。Alex Krizevsky提出了最初的Alexnet,以准确地分类来自CIFAR-10 1的图像,该数据集由10个相互排斥的类(卡车类、飞机类、猫类、狗类、鸟类等)中的60000个32×32彩色图像(50000个用于训练,10000个用于测试)组成,每类6000个图像。该体系结构由多层卷积、汇集、校正线性单元(relu)非线性和局部对比度归一化(在其上使用线性分类器)组成,如图4所示。

    图4

    本文提出的方法旨在处理组织病理学BC分类中常用的高分辨率图像。将现有的深度神经网络模型用于更大的图像可能会导致更复杂的体系结构,具有更大的参数集(越来越大的层),从而大大增加模型的复杂性。因此,微调和培训架构参数所需的时间可能会变得非常长。为了解决这个问题,本文提出的方法是基于随机抽取的用于训练的补丁,以及用于识别的这些补丁的组合。

    为了了解前一节中描述的CNN参数,只使用图像的小补丁进行培训。主要的想法是从高分辨率图像补丁中提取尺寸接近于CIFAR数据集的补丁。既然我们要处理纹理,主要前提是
    这些补丁可以包含足够的信息来训练模型,前提是从每个图像中提取一组合适的补丁。

    基于Hafemann等人报告的结果。通过减小图像的维数来获得最佳效果,在这项工作中,原始的700×460图像被减少到350×230,使用像素面积关系重新采样。之后,我们用两个不同的策略。在第一个例子中,我们使用了一个50%重叠的滑动窗口,而在第二个例子中,补丁是随机抽取的,补丁之间没有重叠控制。此外,根据报告的结果,我们评估了两种不同的图像补丁大小(32×32和64×64)。图5显示了调整大小的图像以及32×32图像补丁

    图5

    在实践中,该方法将翻译不变性引入(a)(b)图5。(a)放大40倍获得的乳腺恶性肿瘤和(b)32×32贴片图像。该模型起到了规范化的作用,防止了模型对训练集的过度拟合。滑动窗口策略允许32×32和32×32的补丁之间50%的重叠,从而分别产生260和54个图像补丁。另一方面,考虑到随机抽取策略,对于两个补丁大小,我们已经固定了从每个输入图像中抽取任意数量的1000个补丁。表3总结了我们在工作中评估的补丁程序图像策略。
    表3

    这里使用监督型的训练模式,在实际的语音和图像识别系统中很常见。在监督模式下,随机梯度下降(SGD)方法与反向传播法(用于计算梯度)和最小批量大小为1,用于更新网络参数,从10-6的学习率开始,结合0.9的动量项和4-5的权重衰减。CNN接受了8万次重复训练。

    以提取的斑块作为输入对模型进行训练。然而,所采用的架构假定一个标准的预处理来降低输入图像的亮度(为了亮度标准化),要么减去确定的平均图像,要么减去每个通道的平均像素值。因此,我们用放大因子计算了所有提取斑块的平均图像。最后,我们从每个输入补丁中减去这个平均图像,然后再将其输入CNN。

    由于模型是在图像的补丁上训练的,所以我们需要一种策略,将原始测试图像分割成补丁,运行它们通过模型并结合结果。通过从图像中提取所有可能的补丁,可以获得最佳结果,但这一点计算量太大。相反,我们选择提取图像的网格补丁,即所有不重叠的补丁集,这在实践中证明了分类性能和计算成本之间的合理平衡。

    运行模型时,每个补丁输出给定补丁图像的每个可能类的概率。为了结合给定测试图像的所有补丁的结果,我们测试了三种不同的融合规则,并获得了最佳结果。换句话说,对一个给定的测试图像的预测是一个类,它最大化了图像所有补丁的概率之和。

    5. 实验结果

    Breakhis数据集分为训练集(70%)和测试集(30%)两组。为了保证分类器对未知患者的通用性,对数据集进行了拆分,以便用于构建训练集的患者不用于测试集。这项研究的结果是五次试验的平均值。该协议独立应用于四种可用放大倍数中的每一种。在讨论医学图像时,有两种方法可以报告结果。在第一种情况下,决策是基于患者的,因此,识别率是在患者级别计算的。设n p为患者p的癌症图像数。对于每个患者,如果n rec癌症图像被正确分类,可以将患者评分定义为:
    在这里插入图片描述

    在第二种情况下,识别率是在图像级别计算的(即不考虑患者信息),因此提供了一种方法来单独估计CNN模型的图像分类精度。让n都是测试集的癌症图像数。如果系统正确分类n个rec癌症图像,则图像级别的识别率为:
    在这里插入图片描述

    识别精度
    在这里插入图片描述

    展开全文
  • Java数据库进行事务处理(批量删除操作)

    万次阅读 多人点赞 2012-08-10 14:22:36
    本文是记录Java数据库进行事务处理(删除操作),在开始之前先来看下面这样的一个页面图:  上面这张图片显示的是从数据库中查询出的用户信息,信息中进行了分页处理,然后每行的前面提供了一个复选按钮,可以...

    本文是记录Java对数据库进行事务处理(删除操作),在开始之前先来看下面这样的一个页面图:


            上面这张图片显示的是从数据库中查询出的用户信息,信息中进行了分页处理,然后每行的前面提供了一个复选按钮,可以选中多个进行操作,这里主要是进行删除操作。在执行删除操作之前先先要选中对应的行信息,点击删除进行删除。当进行多条信息删除的时候,需要使用java的事务处理机制对数据库进行删除,也就是说删除的时候如果选中的要删除的说有信息其中一条没有成功删除的话,那么就都不删除。

            他们就像加盟了某个组织,他们都很讲义气,要死他们一起死,要活一起活,谁也不会落下。现在是在java中要对数据库实现这一操作,我们可看下面的代码,它实现了对数据库的批量删除操作,并且同生死,代码如下:

    /**
    	 * 根据用户代码进行批量删除
    	 * @param userIds
    	 * @return
    	 */
    	public boolean delUsers(String[] userIds){
    		boolean flag = false;
    		Connection conn = null;
    		PreparedStatement pstmt = null;  
    		String sql = "delete from t_user where user_id=?";
    		try {
    			conn = DbUtil.getConnection();
    			conn.setAutoCommit(false);
    			pstmt = conn.prepareStatement(sql);
    			for(int i =0 ;i<userIds.length;i++){ 
    				pstmt.setString(1,userIds[i].trim());
    				pstmt.addBatch();				
    			} 
    			pstmt.executeBatch(); //批量执行 
    			conn.commit();//提交事务
    			flag = true;
    		} catch (SQLException e) {
    			try {
    				conn.rollback(); //进行事务回滚
    			} catch (SQLException ex) { 
    			} 
    		}finally {
    			DbUtil.close(pstmt);
    			DbUtil.close(conn);
    		} 
    		return flag;
    	}
    当然上面是进行批量删除,如果我们只删除一条信息的话也可以使用单独的删除方法,当然上面的方法也是可以完成的,管他的,还是再看一下吧:

    /**
    	 * 根据用户id进行删除单条信息 
    	 * @param userId
    	 * @return
    	 */
    	public boolean delUser(String userId){
    		boolean flag = false;
    		String sql = "delete from t_user where user_id=?";
    		Connection conn = null;
    		PreparedStatement pstmt = null;
    		try {
    			conn = DbUtil.getConnection();
    			pstmt = conn.prepareStatement(sql);
    			pstmt.setString(1, userId);
    			if(pstmt.executeUpdate()>0){
    				flag = true;
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally {
    			DbUtil.close(pstmt);
    			DbUtil.close(conn);
    		} 
    		return flag;
    	}
    上面是对数据库的操作代码,下面看一下页面中怎样实现的,代码如下:

    <pre name="code" class="java"><%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="org.ml.drp.sysmgr.domain.*"%>
    <%@ page import="org.ml.drp.sysmgr.manager.*" %>
    <%@ page import="org.ml.drp.util.*"%>  
    <%@ page import="java.util.*"%>  
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
    	//进行用户信息的删除 
    	String command = request.getParameter("command");
    	if ("del".equals(command)) {
    		String[] userIds = request.getParameterValues("selectFlag");
    		boolean flag = false;
    		if(userIds.length==1){
    			flag = UserManager.getInstance().delUser(userIds[0]);
    		}else{
    			flag = UserManager.getInstance().delUsers(userIds);
    		} 
    		if(flag){
    			out.print("<script>alert('删除成功!');</script>"); 
    		}else{
    			out.print("<script>alert('删除失败!');</script>"); 
    		}
    	}
    	
    	//下面为分页显示做准备 
    	String currentPageStr = request.getParameter("currentPage");
    	String pageSizeStr = request.getParameter("pageSize");
    	int currentPage = 1; //当前页码 
    	int pageSize = 8 ;//每页显示数量 
    	if(currentPageStr!=null){
    		currentPage = Integer.parseInt(currentPageStr);
    	}
    	if(pageSizeStr!=null){
    		pageSize = Integer.parseInt(pageSizeStr);
    	}
    	Page<User> p = UserManager.getInstance().findByPage(currentPage,pageSize);
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    		<title>用户维护</title>
    			<link rel="stylesheet" href="../style/drp.css">
    		<script src="../script/client_validate.js"></script>
    	<script type="text/javascript"> 
    	
    	function addUser() {
    		window.self.location = "user_add.jsp";	
    	}
    	
    	function modifyUser() {
    		var select = document.getElementsByName("selectFlag");  
    		var userName = document.getElementsByName("userName");
    		var password = document.getElementsByName("password");
    		var contactTel = document.getElementsByName("contactTel");
    		var email = document.getElementsByName("email");  
    		var count = 0;
    		var k = 0;
    		for(var i = 0;i<select.length;i++){
    			if(select[i].checked){
    				count++;
    				k = i;
    			}	 		
    		} 
    		if(count==0){
    			alert("请先选择要修改的记录");
    		}else if(count > 1){
    			alert("对不起,每次只能修改一条记录,请重新选择!");
    		}else if(count==1){ 
    			window.self.location = "user_modify.jsp?userId="+select[k].value+"&userName="+encodeURI(encodeURI(userName[k].value))+"&password="+password[k].value+"&contactTel="+contactTel[k].value+"&email="+email[k].value;
    		} 
    	}
    	
    	//删除用户控制 
    	function deleteUser() { 
    		var select  = document.getElementsByName("selectFlag");
    		var flag = false;
    		for (var i=0; i<select.length; i++) {
    			if (select[i].checked) {
    				flag = true;
    				break;
    			}
    		}
    		if (!flag) {
    			alert("请选择需要删除的用户!");
    			return;
    		}
    		if (window.confirm("确认删除吗?")) {
    			with (document.getElementById("userform")) {
    				action="user_maint.jsp?command=del";
    				method="post";
    				submit();
    			}
    		}
    	}
    	//全选/反选操作 	
    	function checkAll(ifAll) { 
    		var select = document.getElementsByName("selectFlag");
    		for(var i = 0;i<select.length;i++){
    			select[i].checked = ifAll.checked;
    		} 
    	}
    
    	function topPage(num) {
    		document.getElementById("currentPage").value = num ;  
    	    document.userform.submit() ;  // 表单提交  
    	}
    	
    	function previousPage(num) {
    		document.getElementById("currentPage").value = num ;  
    		document.userform.submit() ;  // 表单提交  
    	}	
    	
    	function nextPage(num) {
    		document.getElementById("currentPage").value = num ;  
    		document.userform.submit() ;  // 表单提交  
    	}
    	
    	function bottomPage(num) {
    		document.getElementById("currentPage").value = num ;  
    		document.userform.submit() ;  // 表单提交  
    	}
    
    </script>
    	</head> 
    	<body class="body1">
    		<form name="userform" id="userform">
    			<div>
    				<table width="95%" border="0" cellspacing="0" cellpadding="0"
    					height="35" >
    					<tr>
    						<td class="p1" height="18" nowrap> 
    							
    						</td>
    					</tr>
    					<tr>
    						<td width="522" class="p1" height="17" nowrap>
    							<img src="../images/mark_arrow_02.gif" width="14" height="14">
    							 
    							<b>系统管理>>用户维护</b>
    						</td>
    					</tr>
    				</table>
    				<hr width="100%" align="center" size=0>
    			</div> 
    			<table width="95%" height="20" border="0" align="center"
    				cellspacing="0" id="toolbar" style="height: 25;background-color: #696969">
    				<tr>
    					<td width="49%" class="rd19">
    						<font color="#0033FF">查询列表</font>
    					</td>
    					<td width="27%" nowrap class="rd16">
    						<div align="right"></div>
    					</td>
    				</tr>
    			</table> 
    			<table width="95%" border="1" cellspacing="0" cellpadding="0"
    				align="center" class="table1">
    				<tr height="50px">
    					<td width="50" class="rd6">
    						<label>
    							              
    							<input type="checkbox"  name="ifAll" title="全选/反选" id="ifAll" onClick="checkAll(this)">
    							              
    						</label>
    					</td>
    					<td width="119" class="rd6" >
    						用户代码
    					</td>
    					<td width="152" class="rd6">
    						用户名称
    					</td>
    					<td width="152" class="rd6">
    						密码
    					</td>
    					<td width="166" class="rd6">
    						联系电话
    					</td>
    					<td width="150" class="rd6">
    						Email
    					</td>
    					<td width="153" class="rd6">
    						创建日期
    					</td>
    				</tr>
    				<% 
    					List<User> userList = p.getList();
    					Iterator<User> iter = userList.iterator();
    					while(iter.hasNext()){
    						User user = (User)iter.next();
    						%>
    						<tr>
    							<td class="rd8" >
    								<label>
    									              
    									<input type="checkbox" name="selectFlag" class="checkbox1" value="<%=user.getUserId() %>">
    									              
    								</label>
    							</td>
    							<td class="rd8">
    								<%=user.getUserId() %> 
    								<input type="hidden" value="<%=user.getUserId() %>" name="userId">
    							</td>
    							<td class="rd8">
    								<%=user.getUserName() %>
    								<input type="hidden" value="<%=user.getUserName() %>" name="userName">
    							</td>
    							<td class="rd8">
    								<%=user.getPassword() %>
    								<input type="hidden" value="<%=user.getPassword() %>" name="password">
    							</td>
    							<td class="rd8">
    								<%=user.getContactTel() %>
    								<input type="hidden" value="<%=user.getContactTel() %>" name="contactTel">
    							</td>
    							<td class="rd8">
    								<%=user.getEmail() %>
    								<input type="hidden" value="<%=user.getEmail() %>" name="email">
    							</td>
    							<td class="rd8">
    								<%=user.getCreateDate() %>
    								<input type="hidden" value="<%=user.getCreateDate() %>" name="userId">
    							</td>
    						</tr>
    						<%
    					}
    				%> 
    			</table>
    			<table width="95%" height="30" border="0" align="center"
    				cellpadding="0" cellspacing="0" style="height: 25;background-color: #696969">
    				<tr>
    					<td nowrap class="rd19" height="2">
    						<div align="left">
    							<font color="#0033FF"> 共</font>
    							<font color="#FF0000"> <%=p.getPageCount() %></font> 
    							<font color="#0033FF">页</font>     
    							<font color="#0033FF">当前第</font> 
    							<font color="#FF0000"><%=p.getCurrentPage() %></font> 
    							<font color="#0033FF">页</font>
    						</div>
    					</td>
    					<td nowrap class="rd19">
    						<div align="right">
    							<input name="btnTopPage" class="button1" type="button"
    								id="btnTopPage" value="|<< " title="首页"
    								onClick="topPage(<%=1 %>)"<%=currentPage==1?"DISABLED":""%>>  
    							<input name="btnPreviousPage" class="button1" type="button"
    								id="btnPreviousPage" value=" <  " title="上页"
    								onClick="previousPage(<%=currentPage-1 %>)" <%=currentPage==1?"DISABLED":""%>>  
    							<input name="btnNextPage" class="button1" type="button"
    								id="btnNextPage" value="  > " title="下页" onClick="nextPage(<%=currentPage+1 %>)" <%=currentPage==p.getPageCount()?"DISABLED":""%>>  
    							<input name="btnBottomPage" class="button1" type="button"
    								id="btnBottomPage" value=" >>|" title="尾页"
    								onClick="bottomPage(<%=p.getPageCount() %>)"<%=currentPage==p.getPageCount()?"DISABLED":""%>>  
    							<input name="btnAdd" type="button" class="button1" id="btnAdd"
    								value="添加" onClick="addUser()">
    							<input name="btnDelete" class="button1" type="button"
    								id="btnDelete" value="删除" onClick="deleteUser()">
    							<input name="btnModify" class="button1" type="button"
    								id="btnModify" value="修改" onClick="modifyUser()">
    						</div>
    					</td>
    				</tr>
    			</table>
    			<p> 
    				<input type="hidden" name="currentPage" id="currentPage" value="1">
    			</p>
    		</form>
    	</body>
    
    

    上面只是给出数据库删除操作的那一部分java代码,如果需要看看数据库连接以及分页的实现的话可以看前面写过的几篇文章,里面有详细的代码说明的。

    
    
    
    
    展开全文
  • 如何用SPSS数据进行标准化处理

    万次阅读 2017-04-14 09:50:42
    如何用SPSS数据进行标准化处理?    SPSS统计分析软件是我最早接触的数据分析工具,我的博客将陆续介绍SPSS统计分析软件的相关内容,这类文章将统一按照在标题或者正文第一段出现 SPSS案例分析 + 编号 ...

    如何用SPSS对数据进行标准化处理?

           

        SPSS统计分析软件是我最早接触的数据分析工具,我的博客将陆续介绍SPSS统计分析软件的相关内容,这类文章将统一按照在标题或者正文第一段出现  SPSS案例分析 + 编号   的形式组织,便于读者朋友们快速查询、收集,今天是第一篇,即 SPSS案例分析1,后文将不再说明。

     

    --------------------------------------------------------------->

    如何用SPSS对数据进行标准化处理?

        进行多元统计分析时,我们往往要收集不同量纲的数据,比如销售总额(万元),利润率(百分数)。这表现为变量在数量级和计量单位上的差别,从而使得各个变量之间不具有综合性,而多元分析方法大多对变量要特殊的要求,比如符合正态分布或者变量之间具有可比性。这时就必须采用某种方法对各变量数值进行标准化处理,或者叫无量纲化处理,解决各数值不具综合性的问题。

        spss提供了很方便的数据标准化方法,这里只介绍Z标准化方法。即每一变量值与其平均值之差除以该变量的标准差。无量纲化后各变量的平均值为0,标准差为1,从而消除量纲和数量级的影响。该方法是目前多变量综合分析中使用最多的一种方法。在原始数据呈正态分布的情况下,利用该方法进行数据无量纲处理是较合理的。

        spss的实现步骤:图例

     

    【1】分析——描述统计——描述

     

    如何用SPSS对数据进行标准化处理?

         

    【2】弹出“描述统计”对话框,首先将准备标准化的变量移入变量组中,此时,最重要的一步就是勾选“将标准化得分另存为变量”,最后点击确定。

     

    如何用SPSS对数据进行标准化处理?

     

    【3】返回SPSS的“数据视图”,在原始变量的最后多了一列Z开头的新变量,这个变量就是标准化后的变量了。基于此字段可以做其他分析。

    展开全文
  • 境外黑客组织?...IP进行初步探测,使用全端口扫描,扫描时可适当提高扫描速率但不能太快,速率太快会导致丢包漏扫。 扫描探测出存在8080端口,且为tomcat应用,尝试访问/manager/html,成功访问

    记一次对某境外网络攻击组织的溯源

    • 全文已做脱敏处理
    攻击IP xxx.xxx.xxx.xxx
    受害IP xxx.xxx.xxx.xxx
    攻击行为 xx
    攻击次数 xx

    溯源流程

    1. 从监测组手中拿到目标后,第一时间对目标进行威胁情报查询,发现此IP已归纳在恶意IP中。

      image-20210413195429357

    2. 对IP进行初步探测,使用全端口扫描,扫描时可适当提高扫描速率但不能太快,速率太快会导致丢包漏扫。

      image-20210413195510619

    3. 扫描探测出存在8080端口,且为tomcat应用,尝试访问/manager/html,成功访问

      image-20210413195520156

    4. 将制作好的jsp免杀木马通过war包形式上载,成功

      image-20210413200920776

    5. 使用冰蝎成功连接,且为root权限

      image-20210413195616917

      image-20210413200942083

    6. 对ssh连接信息,网络连接信息等分析后,都未得到有效信息

      image-20210413201000261

      image-20210413200054983

    7. 在文件系统中继续探索,按时间排序后发现了攻击者留下的可疑文件,打开后发现为IP列表和签名,猜测为攻击者攻击或拿下的其他IP

      image-20210413200111870

    8. 将此信息放入搜索引擎中查询,得到多个社交网站信息,团队信息以及被攻击者拿下的其他网站。

      image-20210413201031291

      image-20210413201040974

      image-20210413200645539

    9. 同时在目录下发现了名为rev.pl的perl脚本和top100弱口令,经过分析为pentestmonkey编写的反弹脚本,猜测攻击者使用此机器对全网进行扫描渗透,使用弱口令+反弹的流程批量拿shell。

    总结

    1. 拿到后首先做被动扫描,避免提前惊动攻击者,可使用威胁情报,fofa等工具。
    2. 当拿到之后首先确认端口是否开启,若端口开启较少也可使用masscan进行全端口扫描,但速率不宜过快,以免丢包或引起攻击者警觉。
    3. 如遇到WEB服务请使用虚拟机访问,避免蜜罐与浏览器0day攻击。
    4. 拿到shell后首先做好持久化,且做好下载与截图操作方便取证。
    5. 查看ssh等连接的连接IP,网络连接状态。
    6. 查看文件时注意文件日期,同时注意防止攻击者伪造文件时间戳。
    展开全文
  • QImage一般图像的处理

    千次阅读 2015-11-21 15:12:50
    Qt中QImage类封装了对于一般图像像素级的...首先要获得源图像数据,源图像数据进行处理,将结果保存并显示。 QImage *img;//原图像 QImage *grayImg;//处理后灰度图像 1.获得原图像数据 采用此方法即可,
  • 新生研讨课上,曾院长生动形象的给我们介绍了图像处理的有关技术,无论是视频防抖技术,还有基于图像融合技术的照片处理,抑或是马赛克进行还原,都给我留下了颇深的映像 问题背景和应用前景以及潜在问题 和克隆...
  • 主要是EasyUI的TreeGrid控件组织机构管理模块提供直观方便的组织机构管理,以树型结构显示单位和部门的机构体系,可根据需要进行添加、修改、删除或移动等对组织机构进行调整处理。功能特点: 树形目录结构使组织...
  • 不要指望你的客户会给需求分析者提供一个简洁、完整、组织良好的需求清单。分析者必须把代表客户需求的许多信息分成不同... 下面讨论在听取客户需求过程中的一些建议,这将有助于信息进行分类处理。 1) 业务需求,
  • 利用FME坐标文件进行坐标转换

    千次阅读 2018-07-03 11:32:59
    原文发布时间:2010-07-07作者:`Terence在实际数据处理工作中,除了要经常一些图形数据进行坐标转换外,还会遇到坐标文件进行坐标转换的问题。这里所说的坐标文件,是指含有坐标数据并按一定的规范组织的坐标...
  • 教你如何迅速秒杀掉:99%的海量数据处理面试题

    万次阅读 多人点赞 2012-03-22 12:51:07
    教你如何迅速秒杀掉:99%的海量数据...却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将
  • 关于EBS七层组织架构的一些理解

    千次阅读 2016-05-14 13:46:19
    一、EBS的七层组织架构分别为:BG、HR、LEDGER、LE、OU、INV、SUBINV  BG是业务组,是最高层  HR组织是在BG之下的,人事管理方面的组织  LEDGER分类账是在法人之上的一个层次,主要做财务账方面的事情  LE就是...
  • 组织机构管理模块提供直观方便的组织机构管理,以树型结构显示单位和部门的机构体系,可根据需要进行添加、修改、删除或移动等对组织机构进行调整处理
  • java8新技术:数据流式处理之两个list集合多多遍历关联自用测试方法说明一下:list1和list2两个集合进行匹配,将list2中的对应的值取出,使list1中的每条数据都有对应的list2中的name值,list1为主集合,数据需...
  • 数据挖掘和机器学习是进行数据处理的非常有用的工具,当代的好多数据都使用这两种方法。但是这两种方法却包含很多模型和方法,对于初学者来说,面对这些模型总是无从下手。因此,后面的论述主要以处理数据的流程入手...
  • Java Redis数据进行MapReduce

    千次阅读 2019-03-06 21:25:48
    由于它允许在大型商用硬件集群上并行处理数据,因此MapReduce可以显着加快数据处理速度。下面将介绍java基于Redisson-Redis的内存数据网格使用MapReduce处理存储在Redis中的数据。 什么是MapReduce? MapReduce 是...
  • 11.5 公司组织结构在学习和使用组合模式时,Sunny软件公司开发人员发现树形结构其实随处可见,例如Sunny公司的组织结构就是“一棵标准的树”,如图11-8所示: 在Sunny软件公司的内部办公系统Sunny OA系统中,有一个...
  • 使用PCA数据集进行降维

    万次阅读 2018-11-04 20:19:28
    使用PCA数据集进行降维 一、实验准备 1、实验内容和目的 使用主成分分析(PCA)鸢尾花数据集进行降维操作,其中要求绘制出降维后的数据分布散点图并说明降维后的维度,提取的主成分的特征值 其中数据集文件为...
  • 如何正确用户密码进行加密?

    万次阅读 多人点赞 2018-05-27 21:46:16
    相信读者阅读本文后,就会密码的加密有一个正确的认识,并密码正确进行加密措施。作为一名Web开发人员,我们经常需要与用户的帐号系统打交道,而这其中最大的挑战就是如何保护用户的密码。经常会看到用户账户...
  • 我们知道hadoop将数据给到map进行处理前会使用InputFormat... 针对每个split,再创建一个RecordReader读取Split内的数据,并按照的形式组织成一条record传给map函数进行处理。 最常见的FormatInput就是TextInput
  • 理解h5文件并使用pythonh5格式文件进行读写操作

    万次阅读 多人点赞 2019-05-01 14:59:31
      HDF(Hierarchical Data Format层次数据格式)是一种设计用于存储和组织大量数据的文件格式,最开始由美国国家超算中心研发,后来由一个非盈利组织HDF Group支持。HDF支持多种商业及非商业的软件平台,包括MATLAB...
  • (如需交流,请关注公众号:...但是由于后期需要用C来实现数据处理算法,因此也需要完成利用VC6.0来SQLite数据进行操作。为了这段时间学习进行总结,也为了日后用到相关知识可以直接参考积累的成果,特此将这些工作
  • - MOAC(Multi-Org Access Control)MOAC(Multi-Org Access Control)为多组织访问控制,是Oracle EBS R12的重要新功能,它可以实现在一个Responsibility下多个Operation Unit(OU)进行操作。MOAC允许用户在不切换...
  • 医学图像处理综述

    万次阅读 多人点赞 2019-07-09 22:15:51
    0、引言 医学图像处理的对象是各种不同成像机理的医学影像,临床广泛使用的医学成像种类...利用计算机图象处理技术二维切片图象进行分析和处理,实现人体器官、软组织和病变体的分割提取、三维重建和三维显示...
  • 组织机构管理模块提供直观方便的组织机构管理,以树型结构显示单位和部门的机构体系,可根据需要进行添加、修改、删除或移动等对组织机构进行调整处理。功能特点: 1、 树形目录结构使组织机构层次清晰明了。 2、...
  • 行业软件企业PMO组织岗位和职责

    万次阅读 2018-05-14 21:10:21
    是提高组织管理成熟度的核心部门,它根据业界最佳实践和公认的项目管理知识体系,并结合企业自身的业务和行业特点,为组织量身定制项目管理流程、培养项目经理团队、建立项目管理信息系统、项目提供顾问式指导、.....
  • 组织神经网络介绍:自组织特征映射SOM(Self-organizing feature Map),第一部分 自组织神经网络介绍:自组织特征映射SOM(Self-organizing feature Map),第二部分 自组织神经网络介绍:自组织特征映射SOM(Self-...
  • 最有趣的紧张态势和争论,始终围绕着组织是否会因使用分析法而获得最大报酬,以使既有的流程行为(process behavior)更完善,或者改变公司人员的行为。许多企业投下数百万美元用于大数据、大数据分析,并雇用数据分析...
  • 上一篇介绍了一些自组织神经网络的基本...Kohonen认为:一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域输入模式具有不同的响应特征,而且这个过程是自动完成的。自组织特征映射正是根据这一看法提
  • 图像处理算法 面试题

    万次阅读 2018-09-03 16:56:10
    其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此噪声具有平滑作用,能很...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 660,657
精华内容 264,262
关键字:

关于对进行组织处理的