Navigation

    Gpushare.com

    • Register
    • Login
    • Search
    • Popular
    • Categories
    • Recent
    • Tags
    1. Home
    2. 173****7719
    • Profile
    • Following 3
    • Followers 1
    • Topics 32
    • Posts 50
    • Best 39
    • Groups 0

    173****7719

    @173****7719

    在读博士一枚,主要研究方向是基于肌电信号(sEMG)的手势识别问题。

    69
    Reputation
    26
    Profile views
    50
    Posts
    1
    Followers
    3
    Following
    Joined Last Online

    173****7719 Unfollow Follow

    Best posts made by 173****7719

    • RE: 实验和论文,哪个让你更抓狂?

      @你的福气在后头 个人经验是这样的:

      1. 先是读论文,然后聚焦在某一个或几个实验想法或实验方向。
      2. 若实验结果好(概率为0.1%),别高兴的太早,再检查一下,再找别的数据测一下,如果都没问题,烧高香先,然后开始分析你的实验结果为什么好,并且可以开始朝着这个方向写了,写的过程中遇到什么问题,再做实验去补充,但是大的框架就出来了;
        若实验结果不好,分析为什么,然后给出不同的猜想,根据不同的猜想再去做实验验证,直到你取得好的结果,当然在这个过程中你的研究重心可能较一开始已经有所偏移了,这很正常,不管偏移成什么样,聚焦在你的实验最后取得好的结果的那一个方向,一点点搞清楚你的研究目标,研究方法,实验猜想,实验设计以及实验结果和分析,这不是一蹴而就的,而这就是写文章的难点。

      简单来说就是实验的难点在于你事先并不知道你的实验是否能成功,你也不知道多久你能成功,这个过程中你可能得失败很多次,你唯一确定的是,在你获得一些突破性成功之前,你所做的工作等于0,可能你到最后也没能成功,但是在实验过程中却意外有了其他发现,这也是一种成功。

      而写文章的难点在于你要把这个故事写清楚,能够突出你的贡献,并且把它合理化,很多重点你可能在做实验的时候或者是实验成功后依然是不清楚的,写文章的过程能让你自己不断的去完善整个逻辑链条,这个难点在于思路和语句,有时候你是不知道朝哪个角度去写,有时候你是知道,但是不知道用英语怎么更好的表达出来,有的时候是你以为你表达清楚了,然后别人并看不懂。

      总之不管是实验还是文章,都是一个日拱一卒的过程,在这个过程中你还需要跟拖延,挫败,怀疑,毕业压力,未来方向迷茫等敌人做斗争,与君共勉之。

      posted in 聊一会吧
      173****7719
      173****7719
    • 【一分钟知识分享】什么是超参?

      超参(hyperparameters)指的是模型训练前需要预先设置的参数,通常指的是除了模型本身需要学习的参数外的所有参数。

      常见的超参有learning rate,batch size,dropout rate等。

      当然有些超参还涉及到了模型设计,比如CNN每一层的kernel size, 通道数量,激活函数,层数等,甚至包括不同的优化策略本身也可以作为一种超参,以及其本身涉及到的各种参数,比如ADAM里面的betas。

      不同的超参对模型的影响不同,而想要找到某一组超参使得最终训练出来的模型获得我们期待的表现,就是所谓的炼丹。

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • git clone速度慢怎么办?

      刚刚克隆一个自己的项目,卡住了,心在流血。

      Capture.JPG
      查到的方法是走代理!(翻墙)

      一行代码搞定:

      git config --global http.https://github.com.proxy socks5://127.0.0.1:51837

      设置后下载速度平均有个几百k把

      Capture.JPG

      posted in 技术交流
      173****7719
      173****7719
    • RE: 【有奖话题NO.10】 对于炼丹萌新,你有什么走心建议吗?

      送给炼丹新人的炼丹指南
      【炼丹必备】炼丹萌新指南

      posted in 有奖话题
      173****7719
      173****7719
    • 【一分钟知识分享】Pytorch是什么?

      简易版本:Pytorch是一个深度学习框架。

      进阶版本:
      Pytorch是一个由Facebook开发的主流深度学习框架。

      它之所以命名为Pytorch,是因为Facebook用Python语言重构了原本基于Lua语言的深度学习库Torch。

      之前的Torch由于使用的是Lua这一小众语言,极大的限制了其传播和发展,Facebook的这一改动使得Pytorch一跃成为当下最火的深度学习框架之一。

      这得益于

      • Python的引用极大的降低了用户的使用门槛,

      • Pytorch完全继承了Torch的一系列优点,其中最重要的就是其较高的编程灵活性,能够轻松自定义网络层从而快速构建动态神经网络,这一特性也使得Pytorch深受研究人员的青睐。

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【实用代码分享】如何动态查看gpu使用率

      运行程序以后,打开一个新的terminal,输入

      watch -n 1 nvidia-smi

      中间是1指的是每1秒刷新页面

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【炼丹保姆】如何给数据加权重

      准备工作:

      import numpy as np
      import torch
      from torch.utils.data import WeightedRandomSampler
      from torch.utils.data import DataLoader
      from torch.utils.data import TensorDataset
      

      生成数据

      # 假设是一个三分类的问题,每一类的样本数分别为 10,1000,3000
      class_counts = np.array([10, 1000, 3000])
      #  样本总数
      n_samples = class_counts.sum() # 4010
      # 标签
      labels = []
      for i in range(len(class_counts)):
          labels.extend([i]*class_counts[i])
      
      Y = torch.from_numpy(np.array(labels, dtype=np.int64))
      # 随机生成一些数据,不重要
      X = torch.randn(n_samples)
      

      生成权重

      # 给每一类一个权重
      class_weights = [n_samples/class_counts[i] for i in range(len(class_counts))]
      # [401.0, 4.01, 1.3367]
      # 对每个样本生成权重
      weights = [class_weights[i] for i in labels]
      

      数据封装

      train_dataset = TensorDataset(X, Y)
      sampler =  WeightedRandomSampler(weights, int(n_samples),replacement=True)
      

      实验A: 加权分配使用replacement (样本可重复使用)

      train_loader = DataLoader(train_dataset, batch_size=1024,sampler=sampler, drop_last=True)
      
      for i, (x,y) in enumerate(train_loader):
          print(f"batch index {i}, n_0: {(y==0).sum()}, n_1: {(y==1).sum()}, n_2: {(y==3).sum()}")
      # output:
      # 第一个batch,每类的数量分别为 349, 344, 331
      # 第二个batch,每类的数量分别为 344, 360, 320
      # 第三个batch,每类的数量分别为 339, 348, 337
      

      实验B: 加权分配不使用replacement (样本不可重复使用)

      sampler =  WeightedRandomSampler(weights, int(num_samples),replacement=False)
      
      train_loader = DataLoader(train_dataset, batch_size=1024,sampler=sampler, drop_last=True)
      
      for i, (x,y) in enumerate(train_loader):
          print(f"batch index {i}, n_0: {(y==0).sum()}, n_1: {(y==1).sum()}, n_2: {(y==3).sum()}")
      # output:
      # 第一个batch,每类的数量分别为 10, 466, 548
      # 第二个batch,每类的数量分别为 0, 333, 691
      # 第三个batch,每类的数量分别为 0, 173, 851
      

      实验C: 简单随机分配

      train_loader = DataLoader(train_dataset, batch_size=20,shuffle=True, drop_last=True)
      
      for i, (x,y) in enumerate(train_loader):
          print(f"batch index {i}, n_0: {(y==0).sum()}, n_1: {(y==1).sum()}, n_2: {(y==3).sum()}")
      # output:
      # 第一个batch,每类的数量分别为 0, 227, 797
      # 第二个batch,每类的数量分别为 1, 271, 752
      # 第三个batch,每类的数量分别为 6, 257, 761
      

      结论

      使用WeightedRandomSampler 并且允许样本重复使用的话基本可以保证样本的均衡采样。

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【炼丹必备】炼丹萌新指南

      对于炼丹新人来说,我总结了一些实用技巧清单,每个技巧都将为一个目标服务,每个目标的排名分先后。

      首要目标,让程序成功跑起来

      核心思想是为了减少debug时间

      case 1: 从0写起

      • 数据
        • 检查数据维度
        • 随机Plot数据看看
        • 分好训练集,验证集,测试集,严防数据泄露(比如测试集中有的数据在训练集中出现)
        • 确保数据封装过程不出错,比如忘了随机,出现类别不均衡等
        • 精简数据集,只用少量的数据集
      • 模型
        • 使用最简模型或尽量精简目标模型
        • 检查模型输入和输出
        • 检查loss计算是否准确

      case 2: 复现别人公开的项目

      • 环境
        • 选对架构版本
        • 检查软件包版本
        • 选对python版本
      • 数据
        • 定位数据读取的代码
        • 检查数据存储读取路径
        • 检查数据维度
        • 随机Plot数据看看
      • 训练
        • 把epoch改成一个先
        • 检查模型存储位置
      • 测试
        • 查看结果存储类型
        • 检查实验结果存储位置

      测试结果

      • 实验结果设计,尽量存储比较底层的数据,比如一个分类问题,尽量去存储每个样本的预测标签和实际标签,而不是准确率,因为前者可以算出后者,以及其他分析指标,而后者则不能。
      • 实验结果保存
        • 检查路径
        • 检查实验结果是否可覆盖,可修改

      优化代码

      • 代码模块化
      • 注释

      优化实验结果

      这里只能指出大的方向,这个阶段给不了具体的指导了

      • 数据
      • 模型
      • 损失函数
      • 训练方式
      • 超参
      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • RE: 疫情之下,大家的理想清明节 vs 现实清明节?

      @199-6955 清明时节雨纷纷,路上行人,什么?路上有行人?我反手就是一个举报。

      posted in 聊一会吧
      173****7719
      173****7719
    • RE: 【有奖话题NO.9】这一句话,就让炼丹师破防了?

      @136-4660 又或者是你说的‘其他地方’, 能不能升级成py38,毕竟低版本的python不安全,比如py36已经停止更新了,py37预计明年停止更新

      posted in 有奖话题
      173****7719
      173****7719

    Latest posts made by 173****7719

    • 【写作】如何写好conclusion?

      Conclusion的作用

      一篇文章从一开始的铺垫到你结果的展示,你已经把你所有的工作说清楚了,终于到了最后的conclusion了,这时候你需要做的不是简单重复你说过的话,而是把读者从具体的细节里带出来,再次提醒一下他们你做了什么,以及这些工作的意义,这里是对你文章研究发现的一个小展开。

      Conclusion的构成

      • 一个非常精炼的总结
      • 任何与你接下来谈及到的研究意义有直接相关的重要结果的衍生,可能是意外的发现或者是研究的缺陷
      • 给出你主观的结论,可以是这些结果对谁有怎么样的帮助,或者是其潜在的影响
      • 可以包含一个take-away信息,也就是如果你只能通过这篇文章传递出一句话,这句话是是什么
      • 可以是对相关工作的一个指导意义,也就是告诉大家接下来大家应该在哪个方向上继续生挖

      Conclusion注意事项

      • 逻辑上是否完成对introduction到discussion的串联
      • 语言是是否精炼,避免不必要的重复描述,比如“总结,这篇文章我们做了什么,发现了什么, 从而得出了XXX的结论” 不如 直接说 “XXX的发现揭示了XXX”
      • 不要再提任何新的信息
      • 不要简单复制或重复你abstract或Introduction的内容
      • 如果conclusion是单独一段,有自己的段落标题,在句子中可以不用in conclusion, in summary, overall, 等连接词起头,进一步压缩句子从而提供更多有效信息
      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【写作】如何写好results?

      Results在文章中的作用

      • 展示核心发现
      • 为后面的discussion做铺垫
      • 将核心成果转化成一个一个句子,紧密围绕研究课题做出有效阐述

      Results的组成部分

      • 图,表
      • 数据描述,分析 (描述清楚这些结果是怎么样回答了你要解决的科研问题)
      • 核心发现以及衍生发现

      Results怎么串起来

      需要有一条相对清晰的逻辑主线。

      实操的话就是把你想要回答的问题全部列出来?然后把这些问题按照最有逻辑的顺序给排列好,你results中的所有图表都按这个顺序展示,逐条逐句的说清楚你的每一个回答,也就是说清楚你所展示的相关数据到底说明了什么,它是怎么回答其对应的问题的。万事不离what, why, how

      图表的标题

      图表的标题务必做到清晰明了,要给出非常具体的信息,一个好的图表的基本要求就是,单单拿出某张图表,没有上下文,基本上也能看懂个大概。

      实操建议步骤

      1. 弄清楚期刊的要求,看看相关文章是如何展示results的
      2. 逐条列举findings ,其对应的问题,然后再进行合理的排列和优化
      3. 设计图表
      4. 放所有内容,完成results初稿
      5. review初稿,看看是否其回答了预期想要回答的问题,其传递出来的信息是否足够清晰明了
      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • RE: 【有奖话题NO.13】 天临四年,肝论文的炼丹师们,大家还好吗?

      依然记得曾听闻某大佬写一篇期刊初稿只需要大概6个小时,逻辑清晰,文笔优雅,令人神往。

      posted in 有奖话题
      173****7719
      173****7719
    • 【写作】如何写好introduction?

      Introduction 的目的

      作为一篇文章的开头,Introduction起到的作用就是帮助读者清楚的了解到你做到东西有什么用,假设做科研是在拼拼图,你的results是在说你找到某一块缺失的拼图,introduction则是向读者介绍你找到的这块拼图要拼在哪里,缺失的这块对整幅图来说重要在哪里,以及为什么你认为你找到的手上的这块拼图能刚好填补这个缺失。

      简单来说,introduction就好像是一个箭头,这个箭头的作用就是用来指向你的results。

      在introduction中,你需要明确指出你想要解决的问题是什么(what is the research gap?),这个问题重要在哪里(why this gap matters?), 以及最重要的你所做的工作提供了什么价值? (why is your research needed to fill this gap?)

      Introduction的组成

      Introduction-Flow-1.png (Wordvice, 2017)

      如上图所示,Introduction应该遵循一个大的原则,就是又宽泛到细致。
      第一段一般是背景介绍,引出你要拼的大拼图是什么样的,然后强调其中缺了哪一块?

      接着说明缺失的这一块有多重要,以及你认为它为什么会缺失。一般认为的理由会直接引向你的解决方案,也就是你所做工作的起源,一般会有一个假设hypothesis,说清楚你的Hypothesis是什么,基于这个假设,你将做些什么去解决这个问题。

      什么时候写Introduction?

      第一段可以在结果基本确定的情况下开始写,或者整个section留在结果和讨论分析写完以后,为了更好的让你的introduction和你的results进行一个匹配。

      写作的需要注意的地方

      • 尽量用主动语态,起到简化和强调的作用
      • 尽量简洁,同样是为了强调,让读者一下子就抓到了你工作的重要性
      • 动词的使用尽量具体生动, 比如to show this idea is reasonable就不如直接用to justify this idea, justify这个动词更具体以及包含了更多信息
      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【写作】如何写文章?

      前言

      先申明,本文只能算是读书笔记,非原创,原文是whitesides’s group: writing a paper, by George M. Whitesides,非常推荐大家去读原文,不长,就三页纸。

      何为学术论文?

      一篇文章说白了就是记录你验证猜想的过程,问题,猜想,数据,结论,环环相扣,如果你的研究没有发表,那么等同于没有做。

      “研究”指的就是你对某个问题的专研,在专研过程中有了一些猜想,然后去探究其正确与否或是否可行。

      所以一篇文章不仅仅是某一项研究的完结,更是你学术生涯的展望。

      概要

      一篇文章从概要开始写是最有效率的,概要通顺了,文章就成型了。

      通过回答一些列的问题,比如我做了什么?为什么要做?我想要证明什么?用了什么方法?来慢慢捋清楚各个部分之间的联系。全部列好了之后,就可以把各个回答归入其应属于的section,即introduction, method, results, discussion, conclusion。完成之后就是加入数据支撑,开始把支撑这些论点的图表加入进去。

      一篇概要包括一下几个部分

      1. Title
      2. Authors
      3. Abstract,留白先,等文章写好后再写
      4. Introduction, 一到两个完整的自然段
        • 该研究的目的
        • 重要性
        • 背景,有其他人做吗,其他人怎么做的
        • 给读者的指南,读者可以从这篇文章中获得什么?你希望读者重点看什么?
        • 总结, 你希望传递给读者什么?
      5. Results and Discussion,善用子标题,尽量让子标题清晰明了
        概要中不要加细节,但是图表,标题等都需要完整以至于一眼可以发现它们属于哪一部分
      6. 可以用一系列的短语,不要重复结果,需要更高层度的提炼。
      7. Experimental,按照results的展示顺序,配上子标题。
      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • RE: 【有奖话题NO.12】 炼丹师毕业选择图鉴大赏,你上岸了吗?

      学海无涯苦作舟,只缘身在此山中。漫漫人生何所期,一草一木一菩提。

      posted in 有奖话题
      173****7719
      173****7719
    • 【文献笔记】关于给训练样本重新给权重的方法

      前言

      人类学习一般是由易到难,那么模型训练是否也有类似的规律呢?

      背景

      Curriculum learning 的训练结果展示了从容易的样本入手可以提升训练效果,然而一般情况下我们并不知道哪些样本对于模型来说是容易学习的。先假设我们已经对样本有了一定的了解,那么将有三种方法去对样本调整权重。

      方法

      Self-paced learning

      这种方法主张给简单的样本更多的权重,理由是一些比较困难的样本可能本身就是label noise。

      Hard example mining

      该方法则恰恰相反,主张给困难的样本更多权重,理由是基于一些实验观察,比如只用简单的样本往往导致训练过慢,训练困难样本的话反而能加快梯度下降的过程。其假设就是困难的样本不是label noise,是真的值得好好学的。

      Active learning

      这个方法选择给不确定的样本更多的权重。首先该文章认为如果一个模型能够反复预测对一些样本并且给出低置信度的话,则这些样本可能太简单了,没有更多有价值的信息可以榨取,反之如果一个模型训练好多次以后都没办法对一个样本预测对的话,则该样本则被认定为是noise, 或者是被定义为太难了,基本不可能学会了。这两种样本都不应该给更高的权重,反而是那些摇摆不定的样本,也就是时而能预测对,时而不能预测对的样本应该给予更多的权重。这里也间接提供了一种如果判定简单和困难样本的思路。

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【一分钟知识分享】什么是超参?

      超参(hyperparameters)指的是模型训练前需要预先设置的参数,通常指的是除了模型本身需要学习的参数外的所有参数。

      常见的超参有learning rate,batch size,dropout rate等。

      当然有些超参还涉及到了模型设计,比如CNN每一层的kernel size, 通道数量,激活函数,层数等,甚至包括不同的优化策略本身也可以作为一种超参,以及其本身涉及到的各种参数,比如ADAM里面的betas。

      不同的超参对模型的影响不同,而想要找到某一组超参使得最终训练出来的模型获得我们期待的表现,就是所谓的炼丹。

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【炼丹保姆】如何应对验证损失波动比较大?

      前言

      炼丹看验证损失值,要是看到炼丹损失值波动比较大怎么办?

      可能原因及其解决方案

      原因A

      batch size设置小了,因为batch size过小,导致每个batch之间的差异可能会比较大,从而导致损失值波动较大

      解决方案

      适当提高batch size

      原因B

      学习率设置大了,因为学习率过大,模型参数更新过于激进,从而导致了波动

      解决方案

      适当降低学习率

      原因C

      损失函数设计出了问题

      解决方案

      需要单独分析排查问题,可以先用通用损失函数试试看,先确定是否是这个原因。

      posted in 技术分享📚有奖励
      173****7719
      173****7719
    • 【实用代码分享】模块化oss数据上传

      前言

      极致薅羊毛的重点是什么?就是尽量保证实例开机后的每一分钟都用在了训练上,当然实际上不可能做到这么极致,一个大的方向就是把【训练】和【训练结果分析】拆解开,尽量做到训练在实例,分析在本地。这其中关键的一步就是在关机前将训练结果或者是训练好的模型上传到oss。

      实现效果

      # 想要实现的是每次获得实验结果后,只需要用运行一下这个bash文件就好
      ./oss.sh
      

      构建oss.sh文件

      #!/bin/bash
      # 1:可以用 cd 到实验结果存放的文件夹,或者直接把这个oss文件放在文件夹中,这里的举例是后面的这种情况。
      # 2:登录 oss
      oss login
      # 3:压缩数据
      loc="oss://results/" # loc: oss中需要存放的位置
      f_n="XXX.zip" # f_n 压缩后的文件名
      
      f1="XX/" # f1: 需要压缩的文件夹或单个文件
      f2="" # 备用,如需压缩多个文件夹或多个文件
      
      zip -r ${f_n} ${f1}
      
      # 4: 上传到 oss
      oss cp ${f_n} ${loc}
      
      # 5: 删除压缩文件
      rm ${f_n}
      
      # 6: 关机
      shutdown
      

      注意

      这里需要注意的是自己尝试的时候,建议先把最后一句shutdown注释掉,以免前面某些步骤出错后反复关机。

      posted in 技术分享📚有奖励
      173****7719
      173****7719