基于堆栈自编码网络的的近红外光谱分类

光谱预处理算法(python版本) 系列文章目录 近红外光谱分析技术属于交叉领域,需要化学、计算机科学、生物科学等多领域的合作。为此,团队(北邮邮电大学杨辉华老师团队)近期准备开源传统的pls,svm,ann,rf等经典算法,以及sg,msc,一阶导,二阶导等预处理以及ga等波长选择算法,和CNN、AE等最新深度学习算法,以帮助其他专业的更容易建立具有良好预测能力和鲁棒性的近红外光谱模型。 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言 阅读详情

系列文章目录

近红外光谱分析技术属于交叉领域,需要化学、计算机科学、生物科学等多领域的合作。为此,在(北京邮电大学杨辉华老师团队)指导下,近期准备开源传统的PLS,SVM,ANN,RF等经典算和SG,MSC,一阶导,二阶导等预处理以及GA等波长选择算法以及CNN、AE等最新深度学习算法,以帮助其他专业的更容易建立具有良好预测能力和鲁棒性的近红外光谱模型。



前言

NIRS是介于可见光和中红外光之间的电磁波,其波长范围为(1100∼2526 nm。 由于近红外光谱区与有机分子中含氢基团(OH、NH、CH、SH)振动的合频和 各级倍频的吸收区一致,通过扫描样品的近红外光谱,可以得到样品中有机分子含氢 基团的特征信息,常被作为获取样本信息的一种有效的载体。 基于NIRS的检测方法具有方便、高效、准确、成本低、可现场检测、不 破坏样品等优势,被广泛应用于各类检测领域。但 近红外光谱存在谱带宽、重叠较严重、吸收信号弱、信息解析复杂等问题,与常用的 化学分析方法不同,仅能作为一种间接测量方法,无法直接分析出被测样本的含量或 类别,它依赖于化学计量学方法,在样品待测属性值与近红外光谱数据之间建立一个 关联模型(或称校正模型,Calibration Model) ,再通过模型对未知样品的近红外光谱 进行预测来得到各性质成分的预测值。现有近红外建模方法主要为经典建模 (预处理+波长筛选进行特征降维和突出,再通过pls、svm算法进行建模)以及深度学习方法(端到端的建模,对预处理、波长选择等依赖性很低)

本篇主要讲述堆栈自编码(SAE)的的近红外光谱定性分析建模方法

一、数据来源

使用药品数据,共310个样本,每条样本404个变量,根据活性成分,分成4类
图片如下:

![药品数据光谱](https://img-blog.csdnimg.cn/7d76d4b1ed4d4f71a150298bdae3da74.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARWNob19Db2Rl,size_20,color_FFFFFF,t_70,g_se,x_16

二、代码解读

2.1 读取数据

#载入数据
def TableDataLoad(tp, test_ratio, start, end, seed):

    # global data_x
    data_path = './/Data//table.csv'
    Rawdata = np.loadtxt(open(data_path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
    table_random_state = seed

    if tp =='raw':
        data_x = Rawdata[0:, start:end]
    if tp =='SG':
        SGdata_path = './/Data//TableSG.csv'
        data = np.loadtxt(open(SGdata_path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
        data_x = data[0:, start:end]
    if tp =='SNV':
        SNVata_path = './/Data//TableSNV.csv'
        data = np.loadtxt(open(SNVata_path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
        data_x = data[0:, start:end]
    if tp == 'MSC':
        MSCdata_path = './/Data//TableMSC.csv'
        data = np.loadtxt(open(MSCdata_path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
        data_x = data[0:, start:end]
    data_y = Rawdata[0:, -1]
    x_col = np.linspace(7400, 10507, 404)
    plotspc(x_col, data_x[:, :], tp=0)

    x_data = np.array(data_x)
    y_data = np.array(data_y)
    
   

    print('训练集规模:{}'.format(len(X_train[:,0])))
    print('测试集规模:{}'.format(len(X_test[:,0])))


2 .2 划分数据集

 X_train, X_test, y_train, y_test = train_test_split(x_data, y_data, test_size=test_ratio,random_state=table_random_state)

划分结果

2 .3 返回训练集和测试集并绘制光谱图片

    data_train, data_test = ZspPocess(X_train, X_test,y_train,y_test,need=True) #for cnn :false only used in proseesing comparsion
    return data_train, data_test
    

在这里插入图片描述

2.4 建立SAE模型

Stacked Autoencoder(SAE)模型是一个由多层稀疏自编码器组成的深度神经网络模型,如下图所示。其前一层自编码器的输出作为其后一层自编码器的输入,最后一层是个分类器(logistic分类器或者softmax分类器)。
SAE示意图(源于网图,自己是在不想画了)
因此,首先建立单层自编码器

lass AutoEncoder(nn.Module):

    def __init__(self, inputDim, hiddenDim):
        super().__init__()
        self.inputDim = inputDim
        self.hiddenDim = hiddenDim
        self.encoder = nn.Linear(inputDim, hiddenDim, bias=True)
        self.decoder = nn.Linear(hiddenDim, inputDim, bias=True)
        self.act = F.relu

    def forward(self, x, rep=False):

        hidden = self.encoder(x)
        hidden = self.act(hidden)
        if rep == False:
            out = self.decoder(hidden)
            #out = self.act(out)
            return out
        else:
            return hidden

然后构建SAE单层

class SAE(nn.Module):

    def __init__(self, encoderList):

        super().__init__()

        self.encoderList = encoderList
        self.en1 = encoderList[0]
        self.en2 = encoderList[1]
        # self.en3 = encoderList[2]

        self.fc = nn.Linear(128, 4, bias=True)

    def forward(self, x):

        out = x
        out = self.en1(out, rep=True)
        out = self.en2(out, rep=True)
        #out = self.en3(out, rep=True)
        out = self.fc(out)
        # out = F.log_softmax(out)

        return out

最后构建完整的SAE网络预训练和分类器

class SAE_net(object):
    def __init__(self, AE_epoch = 200, SAE_epoch = 200,
                 input_dim = 404, hidden1_dim = 512,
                 hidden2_dim = 128, output_dim = 10,
                 batch_size = 128):
        self.AE_epoch = AE_epoch
        self.SAE_epoch = SAE_epoch
        self.input_dim = input_dim
        self.hidden1_dim = hidden1_dim
        self.hidden2_dim = hidden2_dim
        self.output_dim = output_dim
        self.batch_size = batch_size
        self.train_loader = None

        encoder1 = AutoEncoder(self.input_dim, self.hidden1_dim)
        encoder2 = AutoEncoder(self.hidden1_dim, self.hidden2_dim)
        self.encoder_list = [encoder1, encoder2]


    def trainAE(self, x_train, y_train, encoderList, trainLayer, batchSize, epoch, useCuda=False):
        if useCuda:
            for i in range(len(encoderList)):
                encoderList[i].to(device)

        optimizer = optim.Adam(encoderList[trainLayer].parameters())
        ceriation = nn.MSELoss()

        data_train = MyDataset(x_train, y_train)
        self.train_loader = torch.utils.data.DataLoader(data_train, batch_size=batchSize, shuffle=True)

        for i in range(epoch):
            sum_loss = 0
            if trainLayer != 0:  # 单独处理第0层,因为第一个编码器之前没有前驱的编码器了
                for i in range(trainLayer):  # 冻结要训练前面的所有参数
                    for param in encoderList[i].parameters():
                        param.requires_grad = False

            for batch_idx, (x, target) in enumerate(self.train_loader):
                optimizer.zero_grad()
                if useCuda:
                    x, target = x.to(device), target.to(device)
                x, target = Variable(x).type(torch.FloatTensor), Variable(target).type(torch.LongTensor)
                # x = x.view(-1, 404)
                x = x.view(x.size(0), -1)
                # 产生需要训练层的输入数据
                # inputs = Variable(inputs).type(torch.FloatTensor).to(device)  # batch x
                # labels = Variable(labels).type(torch.LongTensor).to(device)  # batch y
                out = x
                if trainLayer != 0:
                    for i in range(trainLayer):
                        out = encoderList[i](out, rep=True)

                # 训练指定的自编码器
                pred = encoderList[trainLayer](out, rep=False).cpu()

                loss = ceriation(pred, out)
                sum_loss += loss.item()
                loss.backward()
                optimizer.step()

    def trainClassifier(self, model, epoch, useCuda=False):
        if useCuda:
            model = model.to(device)

        # 解锁参数
        for param in model.parameters():
            param.requires_grad = True

        optimizer = optim.Adam(model.parameters())
        ceriation = nn.CrossEntropyLoss()

        for i in range(epoch):
            # trainning
            sum_loss = 0
            for batch_idx, (x, target) in enumerate(self.train_loader):
                optimizer.zero_grad()
                if useCuda:
                    x, target = x.to(device), target.to(device)
                x, target = Variable(x).type(torch.FloatTensor), Variable(target).type(torch.LongTensor)
                x = x.view(-1, 404)

                out = model(x)

                loss = ceriation(out, target)
                sum_loss += loss.item()
                loss.backward()
                optimizer.step()
        self.model = model

    def fit(self, x_train = None, y_train = None):
        x_train = x_train[:, np.newaxis, :]
        x_train = torch.from_numpy(x_train)
        x_train = x_train.float()

        # pre-train
        for i in range(2):
            self.trainAE(x_train=x_train, y_train=y_train,
                        encoderList = self.encoder_list, trainLayer=i, batchSize=self.batch_size,
                         epoch = self.AE_epoch)
        model = SAE(encoderList=self.encoder_list)
        self.trainClassifier(model=model, epoch=self.SAE_epoch)

    def predict_proba(self, x_test):
        x_test = torch.from_numpy(x_test)
        x_test = x_test.float()
        x_test = x_test[:, np.newaxis, :]
        x_test = Variable(x_test)
        x_test = x_test.view(-1, 404)

        out = self.model(x_test)
        outdata = out.data
        self.y_proba = outdata
        y_proba = outdata.numpy()
        return y_proba

    def predict(self, x_test):
        _, y_out = torch.max(self.y_proba, 1)
        y_pred = []
        for i in y_out:
            y_pred.append(i)
        return y_pred

在进行函数的分装,建立模型与数据集间的关系,输入数据集,输出预测精确度和,训练时间以及预测时间

def SAE1(X_train, y_train, X_test, y_test):

    clf = SAE_net()

    start_time = time.time()
    clf.fit(X_train, y_train)
    train_time = time.time()
    y_proba = clf.predict_proba(X_test)
    y_pred = clf.predict(X_test)
    # ACC
    acc = accuracy_score(y_test, y_pred)
    test_time = time.time()

    return acc, (train_time - start_time), (test_time - train_time)

总结

建立了一个SAE模型,实现对药品光谱的预测,预测准确率96.3%,低于CNN,目前来看,CNN网络在大多数情况下,还是优于自编码网络的,也有相关文献佐证,完整代码后续整理上传GitHub仓库 如果对您有用,请点赞!
代码仅供学术使用,如有问题

一文入门近红外光谱数据建模(基础知识总结篇) 本文简述了通过近红外光谱数据建模实现农产品无损检测的大体流程以及方式,适合入门者参考。 阅读详情

相关推荐

一文理解近红外光谱数据建模步骤的细节(细节知识总结)

上一篇文章,向入门的同志大体介绍了近红外光谱数据建模的内容,依据上文其实已经可以基本完成数据建模的工作,但是很多工作不够细致,本文便是分享其中的一些技术细节。

weixin_46207310的博客 5569

可用于近红外光谱数据分析的网上公开数据集

可用于近红外光谱数据分析的网上公开数据集

weixin_48233971的博客 8126

python读取红外图

1.opencv读的话,读取方式 unchanged,值为-1, img=(img/4).astype(np.uint8) 2.换用np.fromfile接口,有时读的图不对,还没找到原因 def bin2numpy_ex(file_path, shape): rawImg = np.fromfile(file_path, dtype=np.uint16) rawImg = rawImg[: shape[0]*shape[1]] pic_gray = rawImg.re...

jacke121的专栏 6256

近红外光谱开源数据集(附带获取链接)

1、使用近红外(NIR)分析玻璃瓶中的216个颗粒样本来预测活性药物成分(API)4、使用近红外(NIR)/近中红外(NIT)和拉曼光谱分析片剂中的活性物质。2、使用近红外(NIR)测量存储过程中面包的老化情况,并对其进行酶处理。5、使用近红外(NIR)和红外(IR)光谱分析32个杏仁蛋白软糖样本。6、对土豆进行感官和物理(单轴压缩、近红外、低场核磁共振)质地测量。3、使用近红外(NIR)/近中红外(NIT)分析单个小麦籽粒。10、玉米样本的近红外(NIR)标准化基准测试数据集。

Next_SummerAgain的博客 5581

Python光谱预处理-归一化、平滑、基线校正

采用Python实现光谱数据预处理,归一化、平滑、基线校正

Dfreedom.的博客 1万+

【1】手把手教你用 YOLO 跑多光谱数据集(零代码改动)

手把手教你用 YOLO 跑多光谱数据集(零代码改动)

Coding... 4004

常见近红外/红外光谱数据预处理方法及MATLAB实现

在近红外等光谱数据分析建模过程中,最关键的一步除了特征选择之外就是光谱数据预处理,预处理的原因是光谱数据除了纯光谱(pure spectra)之外还包含基线漂移、噪声等信号,与此同时存在着因样本大小以及环境等因素带来的谱线偏移,在进行特征分析前能够最大限度的滤除无用及干扰信号是数据分析及信号处理领域最基本、最热门的方向之一,而常用近红外光谱预处理方法包含SNV,MSC,SG,FT以及求...

qq_35667901的博客 4万+

高光谱遥感数据集

高光谱图像数据集,包含Indian,Pavia。每类数据集里包含图像原始信息,以及相对应的ground truth

光谱数据集划分(基于python)

本文介绍了高光谱数据集划分的三种常用方法:随机划分、SPXY算法划分和Kennard-Stone算法划分,并给出了相应的Python实现代码。这些方法可以帮助我们合理地划分数据集,有助后续的模型训练、建立和评估。在实际应用中,我们可以根据具体数据集来选择适合的划分方法。

qq_42629547的博客 2844

低代码Agent开发框架使用指南(二)—Coze平台核心功能概览

本篇分享系统介绍了字节跳动推出的低代码智能体开发平台Coze。Coze以免费易用、多模型支持和便捷的跨平台发布为核心优势,显著降低了智能体开发门槛。文章详细解析了平台的六大核心功能:扩展能力边界的插件系统、增强认知的知识库、结构化数据管理的数据库、可视化图像处理的图像流、实现复杂逻辑编排的工作流,以及处理复杂任务的多智能体协作机制,全面展现了Coze平台的强大能力。

weixin_42782643的博客 1358

Matlab双目相机标定

1 概述 现在有许多双目相机在出厂时就已经标定好了,用户拿到手后可以直接使用,例如Intel Realsense系列。但是有些相机出厂的时候并没有完成标定工作,因而这个时候就需要我们自己来标定。由于笔者曾改装过一个双目相机,最远可以测至50m,因此有一定的心得体会想给大家分享一下。本文主要介绍双目相机标定的整个过程,以及导出标定数据的方法。 相机标定主要分为手动标定和自动标定,手动标定比较繁琐,这里主要介绍基于matlab工具箱的自动标定方式来对双目相机进行标定。具体的相关标定细节也可以参照这篇博客:m

weixin_46133643的博客 2万+

偏最小二乘(Partial Least Squares,PLS)原理及模型建立

随着对数据驱动的工业检测与诊断方法的逐步深入,过程监测的多元统计需要总结的东西越来越多,那么今天来整理一下。 内容较多,理论较复杂,建议细品,你品!最好推一遍~ It’s time to conclude PLS!!! PCA和偏最小二乘(PLS)是从数据中描述正常情况的首选方法。 天气热,冰凉一下吧~ 偏最小二乘法(PLS) 基本原理 偏最小二乘多用于寻求两个矩阵(X和Y)的基本关系,也就是一种在这两个向量空间中对协方差结构建模的隐变量方法。 偏最小二乘模型将试图找到X空间的

车手只需要车和手,压力来自轮胎 6万+

华为OD机试2025C卷 - CPU调度策略 (C++ & Python & JAVA & JS & GO)

华为OD机试 2025C卷 CPU调度策略,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1297

常用的高光谱数据集介绍(赋下载地址)

高光谱简介与三种常见的高光谱数据集

yyyyyyep的博客 1万+

binning模式下和normal模式下相同曝光参数相同场景加权亮度差异消除方案优化(一)

摘要:针对ISP参数设置中浮点权重系数需转换为整数的问题,提出整数邻域搜索方案。该方法在浮点最优解附近(±1/±2)进行局部搜索,通过逐阶微调找到误差最小的整数权重组合,避免直接取整导致的误差反弹(误差从0.8%降至0.35%)。方案结合范围约束(1~15)和单调性约束(暗端递减、亮端递增),兼顾计算效率(单图耗时<10ms)与硬件兼容性,显著优于暴力搜索和简单取整,满足工程落地需求。

大熊 97

16、二阶差分功耗分析(DPA)的再审视

本文深入探讨了二阶差分功耗分析(DPA)中的关键问题,包括不同组合函数的性能、信息论分析以及在有轮廓和无轮廓攻击场景下的实验结果。通过对掩码AES和DES的模拟和实际攻击实验,研究了归一化乘积、求和和绝对差值等组合函数在不同噪声水平下的效率,并强调了信息论分析在评估侧信道对抗措施中的重要性。

leaf8的博客 120

偏最小二乘算法(PLS)回归建模 (Matlab代码实现)

在实际问题中,经常遇到需要研究两组多重相关变量间的相互依赖关系,并研究用一组变量(常称为自变量或预测变量)去预测另一组变量(常称为因变量或响应变量),除了最小二乘准则下的经典多元线性回归分析(MLR),提取自变量组主成分的主成分回归分析(PCR)等方法外,还有近年发展起来的偏最小二乘(PLS)回归方法。偏最小二乘回归提供一种多对多线性回归建模的方法,特别当两组变量的个数很多,且都存在多重相关性,而观测数据的数量(样本量)又较少时,用偏最小二乘回归建立的模型具有传统的经典回归分析等方法所没有的优点。

weixin_66436111的博客 4033

代谢组数据分析(二十二):代谢组原始数据Zscore标准化和主成分分析(PCA)及热图

本教程介绍了使用Z-score标准化和主成分分析(PCA)进行代谢组学数据预处理和分析的方法。代谢物原始数据具有高噪声、高维小样本、高变异性和复杂相互作用关系等特点,因此在数据分析时需注意数据质量控制、参数选择、批次效应、假阳性控制等问题。Z-score标准化通过将数据转换为均值为0、标准差为1的标准正态分布,提高了数据的可比性,减少了系统误差,并适应了统计分析方法的需求。PCA则通过降维、去相关和特征提取,帮助理解数据的结构和模式。教程还详细介绍了数据预处理步骤,包括填补缺失值、设置名称和顺序等,并提供了

专注生信领域 2866

【免费下载】 近红外光谱开源数据集教程

--- ## 项目介绍 **近红外光谱开源数据集(Open-Nirs-Datasets)** 是一个致力于支持定量和定性分析的开放资源,由FuSiry维护。这个数据集旨在促进近红外光谱技术在不同领域的研究与应用,如生物医学、食品科学等。数据集包含了广泛的应用场景,供学者和开发者进行模型训练、算法测试或学术研究。因下载便捷性考虑,项目提供了百度网盘的备份下载方式,提取码为 `b7z6`。 ##...

gitblog_00764的博客 1829

RK3568平台开发系列讲解(安卓篇)LED呼吸灯系统流程

1.app层封装后使用NotificationManager发出:NotificationManager.notify() 2.Android 系统架构中:一个manager类对应一个aidl接口,一个manager对应一个底层的服务,notification也是这个架构

内核笔记 3646

基于FPGA的万兆以太网学习(1)

万兆(10G) 以太网测速视频:SFP+屏蔽笼可以插入千兆或万兆光模块。SFP+信号定义与 SFP 一致。

baidu_34971492的博客 2250

数据集——红外光数据集

图23:Pedestrian Infrared/visible Stereo Video Dataset 示例图。图2:FREE Teledyne FLIR Thermal Dataset 示例图。图16:OSU Thermal Pedestrian Database 示例图。图18:Terravic Facial IR Database 示例图。图17:OSU Color-Thermal Database 示例图。图8:Freiburg Thermal Dataset示例图。

张飞飞的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

高光谱数据集

摘自《基于深度卷积神经网络的高光谱图像分类》徐敏1.Indian Pines 数据集Indian  Pines 是最早的用于高光谱图像分类的测试数据,由机载可视红外成像光谱仪(AVIRIS)于 1992 年对美国印第安纳州一块印度松树进行成像,然后截取尺寸为 145×145 的大小进行标注作为高光谱图像分类测试用途。AVIRIS 成像光谱仪成像波长范围为 0.4-2.5μm,是在连续的 220 个...

qq_38290648的博客 4万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

近红外光谱建模之光谱预处理python实现(一)

目录 1 原始光谱 2 中心化处理 3 标准化处理 1 原始光谱 import numpy as np import matplotlib.pyplot as plt import scipy.io as sio def PlotSpectrum(spec): """ :param spec: shape (n_samples, n_features) :r...

Joseph__Lagrange的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

近红外光谱模型构建流程与评估

模型构建流程     在样本的光谱数据和样本目标值数据之间建立预测模型,通过获取未知样本的光谱数据,根据建立的预测模型,可以准确预测出物质含量。优秀的预测模型不仅依赖于严格的数据处理和表达能力强的模型算法,还依赖于获取的样本本身的特性,比如样本数据的精准性、数据特征能否反映样本本身的属性等。通常,开发稳健和高精度的物质含量预测模型主要包括:1.实验数据获取;2.异常样本识别和剔除;3.样本集划分为训练集和测试集;4.光谱数据预处理;5.特征波长提取;6.借助于机器学习算法建立物质目标含量的预测模型。预测模型

Joseph__Lagrange的博客 1万+

python3.x打开USB双目摄像头(红外IR&可见光EO)

原文链接:https://blog.youkuaiyun.com/qq_25661221/article/details/106408323。原文:https://blog.youkuaiyun.com/qq_25661221/article/details/106408323。复制这行话₤9X9D1rKnatV₤打開氵匋宝【3D视觉双目摄像头模组宽动态人脸识别USB摄像头模块UVC近红外逆光】添加numpy和opencv模块(python3.版本一般已经将numpy模块纳入默认安装模块中)最大分辨率 1920*1080。

张伟的专栏 883
上一篇: mmdetection安装教程
下一篇: 光谱预处理最简单实现方法--基于OpenSA光谱分析库
Echo_Code
博客等级 码龄7年 795粉丝 25原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值