WSL2+miniconda+Jupyter notebook
WSL2+miniconda+Jupyter notebookwin11下构建的开发环境,顺便熟悉一下Linux下的开发
cuda、cuDNN可以直接在win下处理,会直接集成到WSL2,可用nvidia-smi查看相关信息
WSL2安装
安装 WSL | Microsoft Learn
minicond安装
Miniconda — miniconda 文档
conda包含了包管理和环境管理,很方便
1234567# 免不了 conda 换源conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forgeconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --a ...
Linux拾遗
回顾了以前学的内容,纯纯的只学命令而没有真的在linux下整过什么东西,恶补有关内容,真正拥抱这个社区
最近重新把 win+wsl2 拿起来,发现 nvidia 的 cuda 在 win 下安装后通过某种方式直接集成到wsl中了,vscode也接入了wsl,准备日后学习和工作迁移到linux上
拾遗GNU计划
GNU - 维基百科
名称是GNU’s Not Unix!的缩写
Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件和软件,可以被称为GNU/Linux
其内容软件完全以GPL方式发布
POSIX标准
可移植操作系统接口(Portable Operating System Interface of UNIX)
定义了应用程序和操作系统之间的接口,以及命令行shell和程序接口,以实现软件的可移植性
常见的Linux, BSD, macOS, iOS, Android等操作系统均遵循POSIX
开源许可证
宽松式:BSD、MIT、Apache2
Copyleft:GPL(传染性)、LGPL、AGPL、Mozilla(MPL)
选择时可以看那张经典的 ...
MNIST-about convolution
Convolution Neural NetworkDigit Recognizer | Kaggle
最近基本补完了卷积的相关知识,拿 MNIST 来实践巩固一下,torch封装的确实好,定义完网络基本就是调参,对外屏蔽了太多的细节,但对于开发者来说就可以把精力花在对具体问题的分析和解决上(努力达到这个目标!)
准备以这个实验为例子,仔细记录和分析一下CNN重点知识&代码相关的内容
在参考的时候还看到有纯数学实现的CNN网络,太逆天了
同样使用 pytorch 构建 CNN,score 为 0.99035
可以通过数据增强等方法进一步提升模型精度
Notebook基本的一些库,包括torch, numpy, pandas, matplotlib, sklearn,都是必须的库
有用到TensorDataset, DataLoader,进一步标准化训练流程,也是为了防止显存溢出(最后预测的代码段如果不分batch,会报显存 out of memory)
最后,device判断 GPU 是否可用,使用 Kaggle 平台的 GPU P100,有卷积层的情况下,CPU 和 GP ...
Titanic - start from disaster
Titanic_PyTorchTitanic - Machine Learning from Disaster | Kaggle
目标是对泰坦尼克号的幸存者做预测,一个很好的试验田
使用 pytorch 构建的 DNN 进行训练和预测,准确率约 0.772
通过查看相关文章,实验数据存在一定的特殊性,高准确率基本都是先通过特征分析选取强特征再使用决策树(随机森林)的方式进行判断
总结了一下大致的过程:
载入数据
分析数据
预处理数据(空值,独热编码,标签,标准化,类型转换)
网络模型定义(网络,损失函数,优化器,超参数)
训练(mini-batch SGD)
预测
在 CPU 和 GPU 上都实现了一下,但是数据量小看不太出来差异,同时也需要对测试数据进一步划分以求出最佳epoch
其实还可以进一步加入 Kfold 操作,对各种超参数也没有怎么理解
Notebook1234567import numpy as np # linear algebraimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_ ...
Games101总结
Games101总结时隔两年,当初的很多东西都快遗失了,简单做一个笔记备份,彻底和本科阶段的学习做个告别
记录从前对图形学的热枕
01 - 101光栅化,几何,光线追踪,动画(模拟)
相关学科
线性代数,微积分,统计
光学,力学
信号处理,数值分析
美学
线性代数
向量点乘
向量叉乘:右手螺旋定则,例子:已知两轴确定坐标轴,判定左右内外
x×y=z右手坐标系,a×a=0(0向量)
矩阵
矩阵*向量 变换
转置,逆,单位矩阵,伴随矩阵,向量乘法转矩阵形式(点乘和叉乘)
Games101-Transformation提纲
Modeling
Viewing
scale缩放
$$\left[ \begin{matrix} x’ \ y’ \end{matrix}\right]\left[ \begin{matrix} s_x & 0 \ 0 & s_y \end{matrix}\right]\left[ \begin{matrix} x \ y \end{matrix}\right]$$
scale matrix
$$\left[ \ ...
SGI STL内存配置器分析
stl的容器利用缺省的Alloc参数为自己分配内存,Alloc就是stl的空间配置器,用于空间的管理
12template <class T, class Alloc = alloc>class vector {}
空间配置器由内存池,链表来具体实现对空间的分配、回收和管理
在一个对象的创建和销毁时(new和delete),各需要经历了两个步骤
创建
分配空间
用构造函数构造对象
销毁
析构
释放空间
注意区分::operator new和placement new
进一步抽象,就像房子和内部物体结构,同样可以在上面的步骤中,将空间管理和具体结构管理分开
见框架图
构造:调用placement new在指定的位置上设定初值
析构:析构指定位置的东西
空间的管理使用一块内存而不加管理会导致很多问题,诸如向系统堆栈(system heap)请求空间,内存不足,内存碎片等
针对内存碎片,有双层级配置器
对于内存不足和请求system heap,有内存池(memory pool)
为什么不只用一级配置器,malloc似乎也可以分配小空间?
防 ...
Inside The C++ Object Model简单记录
此篇为阅读《Inside The C++ Object Model》时对其中相对重要的 data 语义和 function 语义的一些记录
data语义
编译器一般将多个access sections连锁在一起形成一个区块,这个操作不会降低效率,诸如多个public域
C\C++的边界调整有可能会在中间插入若干bit(类似c的结构体内存对齐)
编译器会自动生成一些内容以支撑对象例如vptr,一般vptr会被插入对象的开头或结尾,依赖编译器的处理
123456789// static data member 不从属于class// 对其的引用会得到一个指向其数据类型的指针,如下struct Test { static const int st_con = 10;};int main() { auto pt = &Test::st_con; //pt is const int*}
所以这时,当两个class都有同名static data member则会产生冲突,此时编译器为每个static data member编码(name ...
SpeedTree导入UE后花叶丢失问题解决
版本问题,speedtree7的树库导入speedtree8后会出bug,据说会在下一个版本解决
解决方法就是ue4中把贴图的alpha通道直接连接到opacity
通过修改
修改成:
C++高级宏操作
C++高级宏操作最近在看一个c++各数据类型和 JSON 或 xml 互转的库,重点阅读了其中宏的编写
xpack项目链接
123456// 结构体格式如下struct User{ long uid; string name; XPACK(A(uid, "id"), O(name)); //用于指示各变量的特殊操作}
1234#define XPACK(...) \ X_PACK_COMMON \ X_PACK_DECODE_BEGIN X_PACK_N(X_PACK_L1, X_PACK_L1_DECODE, __VA_ARGS__) } \ X_PACK_ENCODE_BEGIN X_PACK_N(X_PACK_L1, X_PACK_L1_ENCODE, __VA_ARGS__) }
结构体中的变量数目不定,采用可变参数宏:
...和__VA_ARGS__配合使用,...处填充的内容将填充到___VA_ARGS__处
__VA_ARGS__替换最后一个具体参数后所有内容包括逗 ...
Gamma校正详解
Gamma校正详解参考阅读
LearnOpenGL
首先,物理上灰度的变化是平滑的,两倍的光子就产生两倍的灰度变化,是线性的,但是在人眼中就不同了,人眼对暗部更加敏感,是非线性的
打个比方就是在暗处 0.5 倍的物理光子变化,在人眼中可能变化了 2-3 倍,而在亮处,要让人感到 2 倍的亮度变化,光子可能需要增加 3-4 倍
如上图,线性空间(物理空间)中的 0.2 在人看来就是美术意义上的中灰
简易的一个例子假设自然界中一个 0.218 的灰度,在人眼中就是 0.5
用相机等光学元件记录时,记录的就是 0.218(大多数数码相机以线性方式记录光线)
经过 gamma 校正(gamma 编码),0.218 通过传递函数以 0.5 存储在硬盘中(这一步在现实中,由绘图软件本身做了,存储在 jpg 等格式的文件中)
显示时经 gamma2.2 压暗,以 0.218 的光显示,人眼中就是 0.5,和最开始直接观察一致
如果不校正直接存储在硬盘中,经过 gamma2.2 的压暗输出 0.035,人眼中就是 0.218,结果我们直接看到了线性空间,就是图一的第二行,导致图片的视觉效果非常 ...