自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Graphviz报错: ExecutableNotFound: failed to execute ..., make sure the Graphviz executables

Python的Graphviz包默认了系统里有这个包,因此要先在系统里装好,再pip install。解决方法参考stackoverflow。

2024-06-18 19:29:59 246

原创 因果语言模型(Causal Language Model) 与序列到序列模型(Seq2Seq)的区别与联系

其实有一个容易搞糊涂的点就是,Seq2Seq的decoder和因果语言模型的decoder的原理是几乎完全一样的,那么为什么Seq2Seq不能叫自回归(auto-regression)呢?作为一个NLP Beginner,也做了不少模型训练任务了,但居然到现在都没有搞清楚这两个概念的区分,一直感觉都是transformer,无非是有的encoder-decoder有的是decoder-only。是的,所以关键是建模的方式不同,OpenAI的GPT系列就坚持建模decoder-only的方法。

2023-07-06 15:52:46 2293 4

原创 conda更新transformers库后tokenizers库报错:与openssl版本冲突:libssl.so.10 libcrypto.so.10未找到的问题

这个问题困扰了我好几天,连夜和学长,舍友debug。

2023-04-13 15:35:08 2357 5

原创 数据并行:torch.nn.DataParallel的数据并行原理

优化器则对梯度进行聚合,在主GPU更新模型参数,再把新的参数分发到每个GPU。当然数据并行也可以选择主GPU分发梯度(直接接受梯度,加和,分发,标准的all_reduce),这样每个GPU分别更新参数,理论上效果相同。把输入和label都分别分发到不同的卡上,然后每个卡可以分别计算自己的loss,然后all_reduce一次loss(简单的加和再分发),之后每张卡分别更新自己的梯度即可。将各个GPU上计算得到的梯度加和,并在主GPU上更新模型参数,然后将更新后的参数分发到每个GPU上。

2023-04-10 21:01:01 589

原创 pytorch解决cuda显存问题的方法

pytorch 机器学习 显存分配

2023-01-07 21:18:16 1121

原创 c语言文件组织与多文件gcc命令行编译

最近在学习操作系统,关系到一些c语言文件组织,利用基本的编译链接等等的知识,简单记录如下。

2022-09-21 20:10:26 1123 2

原创 python: 按住ctrl查看函数的介绍 builtins文件

初学python,肯定对一些函数不熟悉,尤其是一些字符串操作函数,哪些是返回一个副本,哪些是直接对字符串进行操作?按住ctrl点击函数查看builtins文件,写的非常清楚!有的明确就写的 return a copy of比如 strip() upper()等等听君一席话,如听inf席话hlggyyds!...

2022-02-27 10:45:42 514

原创 区分new函数的用法

new 类型 [初值] 这是开辟[ ]里面初值个连续存储空间的内存并并把地址赋给指针。相当于一个数组。new 类型 (初值表)这是调用一个构造函数,分配一个类型的存储空间并用()内容初始化对象的部分成员。(调用构造函数)有时候数据结构看不懂,真是c++基础知识不扎实所致。...

2021-10-01 11:07:05 97

原创 数据结构 链表初探 循环链表 Joseph问题

利用循环链表解约瑟夫问题#include <iostream>using namespace std;class Employee{ private: int number; Employee* next; public: Employee(int n=0):number(n){}; int get_number(){return number;}; void set_next(int value){ next-&gt

2021-09-27 19:44:36 125

原创 022 看上去像多态——真正理解多态了吗?

这道题太好了,原来我以为就是一道脑洞题,后来发现实际上这道题在考察我们是否能分清多态和非多态语句。我就没分清,又重新搞明白了#include <iostream>using namespace std;class B { private: int nBVal; public: /*virtual*/void Print() //这两处是否有virtual结果将截然不同 { cout << "nBVal="<< nBVal << e

2021-09-16 19:50:50 389 2

原创 尝试应用多态

多态是真的好用啊,虚函数的调用使得每个类有了更好的封装性这次尝试了郭炜老师教材上的一个简单的多态的实例有些感悟:多态的语句调用哪个类的成员函数是在运行的时候才能确定的,编译时不能确定。因此,对于不同类中的同名虚函数,如调用时都使用了基类对象指针,则在基类中也需要写这些虚函数(虽然并不会被调用),因为编译时并不能确定调用的其实是派生类的虚函数。运行时才能确定。#include <iostream>using namespace std;class CCreature{ p

2021-09-14 08:31:47 80 2

原创 派生类生存期中,构造函数与析构函数的调用顺序测试

#include <iostream>using namespace std;//这个程序测试了 派生类生存期中,它自己,它的基类和封闭类构造与析构的顺序//构造顺序为:基类->封闭类->派生类,析构顺序反之,类似堆栈//尽量写好构造函数,然后在派生类对象,的初始化列表中先后调用其基类的构造函数和其封闭对象的构造函数class Base{ public: int n; Base(int i):n(i){ cout<<"B

2021-09-11 17:50:19 79

原创 mooc openjudge 017 二维数组类

本题考点是在类中实现搭建二维数组,同时对[],()运算符实现重载挺有意思的,好玩的地方在于,[]只需重载一次,第二次是不需要重载的代码如下#include <iostream>#include <cstring>using namespace std;class Array2 {// 在此处补充你的代码 public: int x,y;//维度 int **pa; Array2(int x_=0,int y_=0

2021-09-11 15:18:54 273

原创 mooc 016openjudge 惊呆!Point竟能这样输入输出 对<<和>>的重载

#include <iostream> using namespace std;class Point { private: int x; int y; public: Point() { };// 在此处补充你的代码 friend ostream & operator<< (ostream & o, Point & p){ cout<<p.x<<","<<p.y;

2021-09-11 14:31:41 99

原创 mooc openjudge 014 MyString对运算符重载的综合使用

#include <iostream>#include <string>#include <cstring>using namespace std;class MyString { char * p;public: MyString(const char * s) { if( s) { p = new char[strlen(s) + 1]; strcpy(p,s); } else p = NULL; } ~MyStrin

2021-09-10 20:52:25 292

原创 浅拷贝,深拷贝,体会到了链表的好处

军训结束!今天学习c++运算符重载,结合各种构造析构函数,还有利用赋值运算符进行对象间深拷贝,学着实现一个“动态数组”类感受:首先是体会到了浅拷贝和深拷贝的一些区别,对于某些类,含有动态分配的内存的成员,就不能简单的用默认的“=”来拷贝。因为这是内容的直接复制,那么拷贝和被拷贝对象的指针指向同一块地址,一个被delete另一个也就没了必须深拷贝,自己重载“=”运算符,先分配空间,再复制内容。郭炜老师讲解好形象!另一点就是感受到链表的优越性,动态数组如果不用链表,每次增减元素都需要:一个临时存储

2021-09-10 12:08:33 226

原创 mooc 魔兽世界1 备战 的代码(可能输出要求和题意不符)

这道题考察类的应用,我试了试那些测试数据,输出应该都是对的,不知道为什么最后总是wrong answer。有可能是因为我是输入一组之后立刻输出一组?而题意是输入全部数据后一并输出吗?如果那个样子的话,我想,需要根据输入的组数n,new一个n*5的二维数组,和一个储存司令部生命值的一维数组,然后把数据都存进去,最后在循环中逐次使用。不过实在不想再做了,最近军训没时间,而且感觉题意不太明确。我的代码如下,c++刚开始练,有问题敬请大家指出输出数据应该是对的其中判断循环跳出的条件,我用的redexis

2021-08-30 22:49:53 207

原创 mooc:012这个指针哪来的?对常量成员函数的理解

原题:填空,按要求输出#include <iostream>using namespace std;struct A{ int v; A(int vv):v(vv) { }// 在此处补充你的代码};int main(){ const A a(10); const A * p = a.getPointer(); cout << p->v << endl; return 0;}输入无输出10分析:此处很明显是需要写出g

2021-08-27 18:43:05 102

原创 难以发现的Bug?静态成员变量需要在文件中进行一次初始化/声明

今天在郭炜老师的c++程序设计中学到这一点:eg:int CRectangle::nTotalNumber = 0;int CRectangle::nTotalArea = 0;// 必须在定义类的文件中对静态成员变量进行一次说明//或初始化。否则编译能通过,链接不能通过。定义类的时候变量不能够初始化(只有常量可以),所以需要在全局范围,给静态成员变量(本质是全局变量)进行一次声明或者初始化。这个如果没有做,最新版VSCode并不会报错!!!编译通过但是无法运行,调试也不能显示原因。所以一定

2021-08-26 23:00:41 188

原创 对引用的理解,引用作为函数返回值的实例——mooc(奇异的返回值)

今天做到的郭炜老师的mooc的题:填空,使得程序输出指定结果#include using namespace std;// 在此处补充你的代码getElement(int * a, int i){return a[i];}int main(){int a[] = {1,2,3};getElement(a,1) = 10;cout << a[1] ;return 0;}输入无输出10自己没想到,还是对引用不太熟。引用就是别名,就是一个东西如果是返回值in

2021-08-26 15:36:49 103

原创 c++缺省值的理解

缺省值是对函数形参的“默认”,要么在声明处写,要么在定义处写,但不允许两处都写

2021-08-24 09:28:12 678

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除