孤独症(6)

Neuroimage | 孤独症与功能近红外光谱(fNIRS)综述 Neuroimage | 孤独症与功能近红外光谱(fNIRS)综述1 引言2 综述:目前ASD研究中的两个难题2.1 难题一:ASD在发育中的婴儿大脑2.2 难题二:社会大脑和大脑之间的相互作用3 fNIRS的基本原理3.1 近红外光谱应用的关键模式3.2 fNIRS数据评估和关注点3.3 实验设计与fMRI、EEG的比较3.4 方法论问题4 fNIRS在ASD中的研究4.1 非社会性困难4.2 ... 阅读详情

一如既往,我无法决定我做什么,但是我可以决定我不做什么。
吃晚饭前我不打游戏,不打炉石,不打跑跑狼,不打欧陆战争3,不玩手机。然后今天我要戒欲节制,要想戒欲节制,那就需要运动,今天我要去跑步。离了个大谱,chatgpt没法用了,我现在没法读代码了,我去读读论文吧

1

main.py和dataloader.py都看的差不多了,现在我要看train.py

        train_process = use_train(
            config['train'], model, opts, dataloaders, save_folder_name)
        train_process.train()

传了五个参数进去,这五个参数到底是什么,我需要解释清楚。
config[‘train’]就是训练模型时候要用到的参数,随着代码的执行会不断优化参数

train:
  lr: 1.0e-4
  weight_decay: 1.0e-4
  epochs: 500
  pool_ratio: 0.7
  optimizer: adam
  stepsize: 200

  group_loss: true
  sparsity_loss: true
  sparsity_loss_weight: 0.5e-4
  log_folder: result
  
  # uniform or pearson
  pure_gnn_graph: pearson

model包括两部分,一个是abide_PLS_Net.yaml中的model部分,另一部分是节点大小node_size是100,节点特征大小node_feature_size是111,时间序列大小timeseries_size是111
我感觉还不错,我专门改写了一小段代码来得到节点的值,节点特征的值,时间序列的值

import yaml
import numpy as np

config_filename = 'abide_PLSNet.yaml'
with open(config_filename) as f:
    config = yaml.load(f, Loader=yaml.Loader)
dataset_config = config['data']
data = np.load(dataset_config["time_seires"], allow_pickle=True).item()
final_fc = data["timeseires"]
final_pearson = data["corr"]
_, _, timeseries = final_fc.shape
_, node_size, node_feature_size = final_pearson.shape
print(timeseries)
print(node_size)
print(node_feature_size)

再看看abide_PLSNet.yaml中的model部分

model:
  type: PLSNet
  extractor_type: attention
  embedding_size: 8
  window_size: 4
  cnn_pool_size: 16
  num_gru_layers: 4
  dropout: 0.5

这个model写明是使用了注意力机制,还有cnn神经网络
第三部分是opts,它是一个优化器,里面包含两个主属性,一个是学习率0.0001,另一个是权重衰减0.0001。
dataloader这部分蛮难讲的,因为它的数据量太大了,具体来说分成训练数据集,验证数据集和测试训练集。
save_folder_name这个是最简单的,就是结果的保存路径

2

我看着看着代码脑子里突然有了想法,我应该去准备行测申论了,毕竟论文写再好也只是毕业但不能找工作。
我回到学校了,这学期很重要,不多说了,我开了个网页版番茄钟,还有15分钟。
做事要有始有终,我要把train这部分代码看完。

    def __init__(self, train_config, model, optimizers, dataloaders, log_folder) -> None:
        self.logger = Logger()
        self.model = model.to(device)
        self.train_dataloader, self.val_dataloader, self.test_dataloader = dataloaders
        self.epochs = train_config['epochs']
        self.optimizers = optimizers
        self.best_acc = 0
        self.best_model = None
        self.best_acc_val = 0
        self.best_auc_val = 0
        self.loss_fn = torch.nn.CrossEntropyLoss(reduction='mean')
        self.pool_ratio = train_config['pool_ratio']
        self.group_loss = train_config['group_loss']

        self.sparsity_loss = train_config['sparsity_loss']
        self.sparsity_loss_weight = train_config['sparsity_loss_weight']

        self.save_path = log_folder

        self.save_learnable_graph = True

        self.init_meters()

这部分代码简单来说就是初始化,关键在于初始化的这些对象有什么用

self.model = model.to(device)

像是这一句,就是把PSL这个模型的参数赋值给self.model。这就要涉及到一个问题,到底什么是神经网络。神经网络是干嘛的,它可以用来判断,可以用来预测,可以用来分类。我们给模型的是文字,是图像,是语音等等,但是模型能处理的是数组,是向量。所以在此模型中,神经网络的第一步就是把输入表示为一个8维的向量。这就是嵌入层的维度。那么接下来就是对这若干个八维的向量进行处理。
那么接下来的问题就是神经网络中为什么要有滑动窗口的大小,举个简单的例子。对语言进行处理,有这么两句话分别是:我叫李有福,我吃了饺子。如果每次只分析一个输入,那就是分析:我,叫,李,有,福。这样分析起来效果就不好,因为这个句子应该分为两部分一部分是我叫,另一部分是我有福。那这个时候就要同时分析两个字,有的句子可能要同时分析三个字,这样就有了滑动窗口的概念。有些输入要当成一个输入来分析才有效果,如果分开来看就完全无法理解,比如成语这种东西。
接下来就是pooling layer池化层这个概念,其实这个概念很拗口。我查阅了一下资料,其实池化这个东西有两个作用,一个是降低开销,另一个是防止过拟合。神经网络这个东西,要处理的数据量实在是太大了,谁家也没有超算,更多的科研底层工作者,只有一台笔记本电脑,要是跑代码一次跑一天,这谁受得了。而且很多的模型也不需要那么精确的处理,比如一幅画,从左到右,颜色逐渐变深。即便是把数据进行池化处理了,这个大特征依然是不变的。第二个就是模型有一定的泛化能力。什么是泛化能力,就是模型在A数据集上有很好的性能,拿到B数据集上性能依然很好。
那么接下来就是GRU的问题,在说GRU之前,我想先说一下网络小说。我喜欢看网络小说,现在我经常想的一个问题是网络小说作家什么时候被AI替代,生成文字可是AI的强项,它只需要吃电就能干活,而且一天想写多少写多少。网文作家一天能写一万字那已经很肝了,AI一天写一千万字一亿字又如何。可是AI的一个问题就是写着写着逻辑崩溃了,牛头不对马嘴。网文里有个挖坑的说法,一个引子几十章几百章之后解密都是有可能的,可是AI写着写着自己都忘了,都不知道自己写的啥了。这就是梯度消失问题。GRU就是为了解决这个问题而提出的

        self.train_dataloader, self.val_dataloader, self.test_dataloader = dataloaders

其实一开始我并不了解验证集是干嘛的,下面估计有对应的代码吧,根据验证集得到的结果对参数进行调整

self.loss_fn = torch.nn.CrossEntropyLoss(reduction='mean')

这句话是定义损失函数的,这个PLS神经网络是用来判断孤独症的,那就是一个二分类任务,yes or no。首先是输出,然后进行softmax处理,比如说yes的概率为0.7,no的概率为0.3。如果说它的真实标签是yes,那么损失函数就是-log(0.7)=0.1549,损失函数越小,代表准确率越高。

self.pool_ratio = train_config['pool_ratio']

关于池化,我已经理解了,这个池化比率可能是为了防止过拟合吧。

        self.group_loss = train_config['group_loss']

        self.sparsity_loss = train_config['sparsity_loss']
        self.sparsity_loss_weight = train_config['sparsity_loss_weight']

原来组损失和稀疏性损失是完全不同的,稀疏性损失比较简单,比如在这个PLS神经网络模型中输入是一个八维的向量,那么有可能只有一到两个向量起到了关键作用,大部分的向量是无用的,那么花时间和算力去处理它就是无意义的,自然可以把这些无用向量忽略掉。组损失很玄乎,我不好解释

3 train如何执行

    def train(self):
        training_process = []
        txt = ''
        for epoch in range(self.epochs):
            self.reset_meters()
            self.train_per_epoch(self.optimizers[0])
            val_result, _ = self.test_per_epoch(self.val_dataloader,
                                             self.val_loss, self.val_accuracy)

            test_result, con_matrix = self.test_per_epoch(self.test_dataloader,
                                              self.test_loss, self.test_accuracy)

            if self.best_acc <= self.test_accuracy.avg:
                self.best_acc = self.test_accuracy.avg
                self.best_model = self.model

            if (con_matrix[0][0] + con_matrix[1][0]) != 0:
                SEN = con_matrix[0][0] / (con_matrix[0][0] + con_matrix[1][0])
            else:
                SEN = 0

            if (con_matrix[1][1] + con_matrix[0][1]) != 0:
                SPE = con_matrix[1][1] / (con_matrix[1][1] + con_matrix[0][1])
            else:
                SPE = 0

            self.logger.info(" | ".join([
                f'Epoch[{epoch}/{self.epochs}]',
                f'Train Loss:{self.train_loss.avg: .3f}',
                f'Train Accuracy:{self.train_accuracy.avg: .3f}%',
                # f'Edges:{self.edges_num.avg: .3f}',
                # f'Test Loss:{self.test_loss.avg: .3f}',
                f'Val Accuracy:{self.val_accuracy.avg: .3f}%',
                f'Test Accuracy:{self.test_accuracy.avg: .3f}%',
                f'Val AUC:{val_result[0]:.2f}',
                f'Test AUC:{test_result[0]:.4f}',
                f'Test SEN:{SEN:.4f}',
                f'Test SPE:{SPE:.4f}'
            ]))

            txt += f'Epoch[{epoch}/{self.epochs}] '+f'Train Loss:{self.train_loss.avg: .3f} '+f'Train Accuracy:{self.train_accuracy.avg: .3f}% '+f'Val Accuracy:{self.val_accuracy.avg: .3f}% '+f'Test Accuracy:{self.test_accuracy.avg: .3f}% '+f'Val AUC:{val_result[0]:.3f} '+f'Test AUC:{test_result[0]:.4f}'+f'Test SEN:{SEN:.4f}'+f'Test SPE:{SPE:.4f}'+'\n'

            training_process.append([self.train_accuracy.avg, self.train_loss.avg,
                                     self.val_loss.avg, self.test_loss.avg]
                                    + val_result + test_result)
        now = datetime.now()
        date_time = now.strftime("%m-%d-%H-%M-%S")
        self.save_path = self.save_path/Path(f"{self.best_acc: .3f}%_{date_time}")
        if self.save_learnable_graph:
            self.generate_save_learnable_matrix()
        self.save_result(training_process, txt)
        training_process = []
        txt = ''

看它这个意思,train_process和txt是配套使用的,用来记录每一轮训练的准确率和损失率

            if self.best_acc <= self.test_accuracy.avg:
                self.best_acc = self.test_accuracy.avg
                self.best_model = self.model

avg就是accuracy,即准确率,准确率自然是越高越好,看这个代码的意思,每一轮的训练都会有一个准确率,都会有一个model,那么更好的model会被选取。

            if (con_matrix[0][0] + con_matrix[1][0]) != 0:
                SEN = con_matrix[0][0] / (con_matrix[0][0] + con_matrix[1][0])
            else:
                SEN = 0

            if (con_matrix[1][1] + con_matrix[0][1]) != 0:
                SPE = con_matrix[1][1] / (con_matrix[1][1] + con_matrix[0][1])
            else:
                SPE = 0

这个混淆矩阵是值得一说的,TP也就是[0][0],即为模型正确预测为正类的样本,FN也就是[0][1],即为模型错误预测为负类的正类样本数,FP也就是[1][0],即为模型错误预测为正类的负类样本数,TN即为模型正确预测为负类的样本数。

详解AXI4-Stream接口(1)--什么是AXI4-Stream接口? 通过本文您会学到:什么是AXI4-Stream接口? 阅读详情

相关推荐

FPGA实现SDRAM接口(3)--自动刷新

通过本文您会学到:如何进行SDRAM的自动刷新操作。

孤独的单刀 8670

Verilog直接显示状态机名称的办法

通过本文您可能会了解:如何在仿真状态机时直接显示状态名,而非二进制数字。

孤独的单刀 5529

r语言svr模型_R语言初探强化学习中的马尔可夫模型

强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以...

weixin_28994357的博客 1115

【FPGA/IC】状态机FSM的各种写法(一段式、二段式、三段式、摩尔型Moore、米勒型Mealy)

FPGA状态机(一段式、二段式、三段式)、摩尔型(Moore)和米勒型(Mealy)

孤独的单刀 7万+

块坐标下降法实战:如何用Python一步步优化无人机通信网络?

本文通过Python实战案例,详细介绍了块坐标下降法在优化无人机通信网络中的应用。文章以最大化网络吞吐量为目标,将复杂的非凸问题拆解为功率分配和轨迹规划两个子问题,并提供了完整的算法实现、代码示例及调参指南,为机器学习工程师解决类似优化问题提供了实用参考。

sat99的博客 976

从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

Cubemx配置LWIP,实现网络通信

qq_30623327的博客 1万+

FPGA设计的10点小知识

FPGA设计的10点小知识

孤独的单刀 7045

matlab锅炉 pid仿真,基于Matlab锅炉仿真.doc

基于Matlab锅炉仿真内蒙古科技大学MATLAB课程设计任务书2012题 目:锅炉汽包水位控制系统学生姓名:林三彪学 号:0967112127专 业:测控技术与仪器班 级:2009-1指导教师:梁 丽摘 要锅炉是化工、炼油、发电、造纸和制糖等工业生产过程中必不可少的重要动力设备。锅炉往往成了不少工厂不可缺少的一部分,因而,对锅炉设备中的自动控制系统进行分析研究是必要的...

weixin_29133981的博客 1096

为什么天才容易患阅读障碍症_男孩惹谁了?!男女患自闭症几率4:1,为什么?...

自1943年美国L.Kanner医生报道第一例孤独症起到现在,70多年间,孤独症已经从最初的“罕见病”,慢慢被越来越多人熟知。2018年,美国疾病控制与预防中心发布最新统计,孤独症的发病率为1/59。随着医学各界的努力,关于孤独症的发现越来越多,但还有很多未解之谜,仍在探索。比如,孤独症无种族、地域和社会差异,但有性别差异,男孩多女孩4-6倍,这是什么原因?今天,从事30多年大学教学科研...

weixin_39619858的博客 1083

uniapp监听扫码枪键盘事件|无输入框式监听

一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备。当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup。

tcy9099的专栏 9753

Halcon一维测量实战:从measure_pos与measure_pairs的底层原理到精准应用

本文深入解析Halcon中measure_pos与measure_pairs算子的底层原理与精准应用,涵盖参数调优、测量矩形方向设置及典型工业场景实战。通过对比分析,揭示两者在一维测量中的核心差异与适用场景,提供从基础到高级的完整解决方案,助力工业视觉检测精度提升。

weixin_42525551的博客 426

hutool 取前12个月_1~12个月自闭症婴幼儿早期识别筛查表

目前,从国内外的自闭症病例报道来看,在回顾自闭症儿童的早期发育史时,许多敏感的家长及临床医生还是可以发现此类儿童的特殊表现,虽然不能在这一时期就确定儿童患有自闭症,但孩子成长在每一阶段都有明显发育标志,而孤独症谱系障碍的儿童在发育阶段会有一些明显的症状不同于正常孩子。北大医疗脑健康专家整理权威孤独症儿童在每个阶段特殊的异常表现,详情如下:1~3月孤独症儿童的早期识别同新生儿一样,孤独症儿童在此阶段...

weixin_39619170的博客 182

【多媒体交互】Unity+普通摄像头实现UI事件分析

利用摄像头捕捉用户的手势或动作,结合坐标映射与事件系统触发UI交互

qq_38350004的博客 1327

开启孤独症康复之旅:上海孤独症学校的创新教育模式

上海孤独症学校将继续砥砺前行,不断探索和完善创新教育模式,为更多的孤独症儿童打开通往美好未来的大门,让他们在温暖和关爱中绽放出属于自己的光芒。

GZ_xqfxbyy的博客 735

基于学术研究于NASA官网GPM卫星数据下载详细教程

基于学术研究于NASA官网GPM卫星数据下载详细教程

珞瑜的博客 8658

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

4月2日世界孤独症日,壹基金启动蓝色行动关注孤独症群体

深圳2022年4月1日 /美通社/ -- 2022年4月2日世界孤独症日,深圳壹基金公益基金会连续第11年启动蓝色行动,继续以“让爱来,让碍走”为行动主题,联合40余家爱心企业、媒体及互联网平台,230余家社会组织、超过300位公众人物,通过变蓝、定制代言海报、融合击掌、蓝信使等多种线上、线下联合倡导活动,向公众发出倡议:加入壹基金蓝色行动,推动社会各界支持孤独症(自闭症...

美通社 471

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

间歇性孤独症,我喜欢的,是你刚好在我身边

你知道吗?人在难过的时候会爱上日落。 –《小王子》 眼看着身边的朋友越来越多拥有了「间歇性孤独症」的标签。 以前只是发现没有对象的人都自诩单身贵族,宁缺毋滥。 而现在,年龄越长,在享受孤独的同时,也渴望着某些时刻能有人陪伴。 像这类「间歇性孤独症」通常患病于电影院、火锅店以及甜品站等多种场景。 为了让大家更了解这个症状, 兔聊君采访了几位间歇性孤单症患者。 间歇性孤独症 NO.1 @是小飞阿...

hupoerr的博客 526

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

看见孤独症儿童眼睛里的星

孤独症是一种脑发育性障碍,以社会交往障碍、沟通交流障碍和重复局限的兴趣行为为主要特征。每一个孤独症儿童及他们的家庭,都渴望被这个世界理解、接纳和认可。特殊教育教师,便是那个能看见孤独症儿童眼睛里的星,伸出温暖臂膀读懂他们星球故事的追光者。 6岁的陶陶是一个胖嘟嘟的可爱男孩,任谁一看都忍不住去捏捏他鼓鼓的小脸颊。可他来到班里的第一天着实给了老师们一个下马威,当其他小朋友基本能独立玩玩具时,他还是不停地哭着,嘴里喊道:“妈妈 妈妈。”面对新的环境和老师他表现出了极大的抗拒和不安感。 陶陶是一个典型的孤独症儿

pure2forever的博客 169

孤独症儿童社会交往训练的探索与实践

孤独症儿童的社会交往训练是一个长期而细致的过程。我们需要以爱心和耐心为基础,结合科学的训练方法和技术手段,为孩子们创造一个充满关爱和支持的社交环境。通过不懈的努力和坚持,相信孤独症儿童一定能够逐步克服社交障碍,融入社会大家庭。

GZ_xqfxbyy的博客 1140

自闭症和孤独症是一回事吗

无论是通过早期干预、特殊教育、心理支持还是社会融合活动,我们的目标都是帮助这些孩子充分发挥他们的潜力,提高他们的生活质量,并促进他们在社会中的融合和发展。孤独症,也称为自闭症谱系障碍(Autism Spectrum Disorder,简称 ASD),是一种广泛的神经发育障碍,其主要特征包括社交互动和沟通方面的持续性缺陷,以及受限、重复的行为模式、兴趣或活动。而受限、重复的行为模式则表现形式多样。我们应当关注的不仅仅是名称的统一,更重要的是对这一群体的理解、关爱和支持,为他们创造一个更加包容和友好的世界。

GZ_xqfxbyy的博客 561

开源开放 | 孤独症谱系障碍知识库AsdKB

转载公众号|东南COIN题目:AsdKB: A Chinese Knowledge Base for the Early Screening and Diagnosis of Autism Spectrum Disorder作者:吴天星1、曹旭东1、朱益鹏1、吴飞跃1、龚天凌1、王宇翔2、景慎旗3作者单位:1东南大学认知智能研究所,2杭州电子科技大学,3南京医科大学论文:ISWC 2023论文...

开放知识图谱 1703

特殊儿童关爱:为孤独症儿童定制沟通训练语音

借助IndexTTS 2.0技术,仅需5秒录音即可克隆亲人声音,为孤独症儿童生成情绪稳定、节奏可控的个性化沟通训练语音。系统实现音画同步、情感解耦与零样本克隆,让父母之音成为干预的一部分,降低认知负荷,提升信任与依从性。

weixin_42388898的博客 826

Science子刊: 类配对分析法揭示孤独症患者肠道菌群解毒功能受损

Science Advances: 类配对分析法揭示孤独症患者肠道菌群解毒功能受损标题:类配对法揭示孤独症谱系障碍儿童肠道微生物解毒功能受损Title:A quasi-paired c...

刘永鑫的博客——宏基因组公众号 1385

9.PPT:儿童孤独症介绍【22】

9.PPT:儿童孤独症介绍【22】

m0_74841364的博客 788

儿童孤独症表现跟自闭症表现的同一种吗?

儿童孤独症并不是自闭症的一种独立类型,而是自闭症在儿童期的一种表现。我们应该使用“自闭症”或“孤独症谱系障碍”这一专业术语来准确描述这一神经发育障碍。同时,我们也应该加强对自闭症的认识和关注,为自闭症患者及其家庭提供更多的支持和帮助。通过全社会的共同努力,我们有望为自闭症患者创造一个更加包容、理解和支持的社会环境。

GZ_xqfxbyy的博客 600

Gut Microbes:南医大刘星吟团队揭示肠道微生物谱的改变与孤独症谱系障碍的异常神经递质代谢活动相关

文章目录肠道微生物谱的改变与孤独症谱系障碍的神经递质代谢活动相关导读背景结果研究队列信息表1. 入组研究对象情况表16S rRNA基因测序结果表明孤独症儿童的肠道菌群组成发生改变图1. 16S rRNA测序结果表明健康儿童组(TD)和孤独症儿童组(ASD)的肠道菌群组成存在差异图S1. 非便秘孤独症组(NC-ASD)和健康组(TD)的肠道菌群分析。图S2. 便秘孤独症组(C-ASD)和非便秘孤独症...

刘永鑫的博客——宏基因组公众号 6666
上一篇: 孤独症(5)
下一篇: 孤独症(7)
人生无根蒂,飘如陌上尘
博客等级 码龄9年 224粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值