2024 08 16, 2046 今日內容
2024-08-16, 20:46-今日內容
Neovim 鼠标移动到上一个单词b或者ge Neovim 删除这个word: daw (delete a word) Neovim 高级用法 operator和移动Motion命令的组合,让你想干什么就干什么 Neovim 查看函数的定义。 还有查他的reference telescope Neovim里面的plugin管理器是lazy Bootstraping就是自己引导自己 接下来进行一系列的自动化的操作的过程 Yank 在neovim里面 是复制文本到clipboard LeaderF 在neovim里面是一个插件。 他可以模糊搜索 Neovim 快捷指令 Lua 简单语法 Neovim 小小教程 Neovim 在linux的安装: 用上kickstart.nvim ppa linux 里是啥 他是personal package archive Distribution 是什么 Wget 和 curl, man 是什么意思 Lua 是neovim里面编辑插件的语言。传统的vim不是用lua啊, 所以很难扩展和自定义。
2024-07-22-tensorflow (google)和pytorch (faceebook)我该选哪一个。
Stable diffusion 就是稳定扩散 device 到底怎么选 mps 还是cuda 还是cpu 苹果的MPS 是什么metal performance shaders 是一个后端。 是Apple的。 主要用在Apple的硬件加速… 把tensor 转换成numpy array的步骤,主要用于数据分析,不是计算了。直接对这个tensor呼叫numpy 就好了。… CPU GPU 在torch上的自由转换 onehot encoding的categorical的问题,我们要拿到预测的标签,就可以直接说: F string 的写法, 并且要在里面让某个value保留几位小数的方法 Torch 里面的criterion 的另外一个名字就叫做loss Adam优化是什么(adaptive moment estimation)也就是结合了动量法 和RMSProp的方法
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 鼠标移动到上一个单词b或者ge
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 删除这个word: daw (delete a word)
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 高级用法 operator和移动Motion命令的组合,让你想干什么就干什么 操作符operator: 就是删除,append 啥的
移动motion:就是上下左右,哪个word,哪个line,文件末尾。还是啥
删除的牛逼用法 首先记住删除就是d 在d 上面的牛逼操作可以这么写: d w :就是删除这个word(你得把光标放在这个word的开头)注意是这个单词的最后,这个贼有用,就是你可以一直往后删除word D e :删除到这个单词的end。 注意是这个单词的最后,这个贼有用,就是你可以一直往后删除word D $ :删除到这一行的最后。 Dd 就是删除这一整行
更牛逼的操作,你想精确的移动就要结合数字:(nvim的右下角可以看到你输入的移动指令)
移动moving(注意这里是把curser移动): W:移动到下一个word的开头(有用!) 2w:移动2个word 3e: 移动到第三个word的end 0: 移动到这一行的开头。(有用!)
把高级的移动结合高级的操作: 比如向下删除2个word
d 2 w
dd 删除整行 2dd 删除两行
快速去到某一行: (咋查看自己在那:从control+g 右下角有显示)记住一些行号很重要,因为vscode也可以让你快速跳转
具体到哪一行就是行号加上大G
最后一行: 大G 第一行:gg
搜索: / 和? / 是向下搜的, ?是往前找的 如果要查找下一个就是n 如果要看上一个就是N 搜完了想要回去你来的位置就control + o
再反着推就是control+I
括号匹配: 光标在某个括号,中括号,花括号,方括号,你再输入% ,就会显示他匹配的另一半。amazing。 再输入% 又会回去 lol
怎么替换word呢: :s/old/new/
光标在哪里 ,就会替换那一行第一个出现的word
如果你要这一行word的所有出现的都替换,就在语法最后加上g(g 就是一个flag) :s/w/new/g
替换某行到某行的的要加上行号:记住也要加上g,行号行号之间用逗号,跟python差不多的 :行号,#行号/old/new/g
全局的整个文本的替换:
:%s/old/new/g
如果让他问你全局替换就说 :%s/old/new/gc
他会问你: replace with SUMMARY (y/n/a/q/l/^E/^Y)?
Y就是替换这个 N就是不替换这个,跳过 A是替换现在的,以后的也全部替换,不提醒你了 Q就是退出替换界面 L就是替换现在的,然后紧接着退出替换界面 ^E就是往上帮你滚动屏幕 ^Y办你向下滚动屏幕
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 查看函数的定义。 还有查他的reference gd (go definition) 把鼠标移动到这个word gd就是go difinition了。
gr 查找reference 也就是查找谁用了这个function
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
telescope 用来fuzzy finder的 也是neovim里面的
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim里面的plugin管理器是lazy 要sync 就说: Lazy sync
run lazy: :Lazy
让他update: :Lazy update
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Bootstraping就是自己引导自己 接下来进行一系列的自动化的操作的过程
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Yank 在neovim里面 是复制文本到clipboard Yy 复制这一行 Yw 复制这个word Y¥复制到这一行结束 Y3j: 从当前行往下三行复制
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
LeaderF 在neovim里面是一个插件。 他可以模糊搜索
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 快捷指令 普通模式下面: space s h
可以帮你快速search找到help (sh)
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Lua 简单语法 comment out: 两个破折号。
1. 单行注释 - -
2. 多行注释
-
- [[ 乱七八糟的code ]]
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 小小教程 打开neovim: 在shell里面写nvim 如果要编辑某个文件 就写 nvim FILENAME
: Tutor 教你一些最简单的neovim的东西
移动: :j 往上键盘上突出的那个键,就是往下。 k :k往上 :h往左 : l往右
:q就是直接退出 不要保存 :q! 就是丢掉你做的所有更改,然后强制退出,要谨慎使用 : x 在normal下 吧光标移动到word上,按x就能cut这个word。一般的删除操作就是这个x : i进入插入的模式可以编辑文档 :a 在normal下是appending。他会帮助你增加一些文字。
删掉(想进行一些复杂的删除就用这个) ⁃ 某个word : dw 把光标移动到这个word的开头,然后dw 就可以 ⁃ 从光标到line的最后: d$
undo: :u undo一次 : U这一整行全部undo
redo:control+r
Paste 把上次删掉的东西 在cursor的位置贴出来 :p
replace某个charactor ,适用于快速的修正
就是:r然后把正确的写上就好了。r会帮你替换那个错的char
快速change :c 某些word到这个word的最后 :ce
在vim里面运行command line的语言 :! 前面加上这个叹号就好了 比如你可以查看conda 环境 !conda env list 你可以 !ls 查看当前的dir 都有什么文件 !rm test.py 删除这个
save file : w 文件名字
:e 编辑文件
你可以说: e $MYVIMRC 就可以打开你的lua写的插件的文件了
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Neovim 在linux的安装: 用上kickstart.nvim https://github.com/nvim-lua/kickstart.nvim?tab=readme-ov-file#Install-Recipes
首先安装neovim:就这三部
sudo add-apt-repository ppa:neovim-ppa/unstable -y sudo apt update sudo apt install make gcc ripgrep unzip git xclip neovim
再安装这个大神的东西:
git clone https://github.com/nvim-lua/kickstart.nvim.git “${XDG_CONFIG_HOME:-$HOME/.config}”/nvim
这个教程帮我们把所有需要的东西都安装上了。
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
ppa linux 里是啥 他是personal package archive 他不是软件,是一个软件仓库, 我们添加了ppa ,就可以从这个repo里面安装和更新我们的package
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Distribution 是什么 就是加了一大堆的插件的东西 很臃肿,但是已经ready to go 了。
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Wget 和 curl, man 是什么意思 Wget是下载到本地
curl是在terminal里面看看
如果已经安装了某个app 比如说lua 可以用man lua 来看
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Lua 是neovim里面编辑插件的语言。传统的vim不是用lua啊, 所以很难扩展和自定义。 基本操作:
⁃ Str: local text = "Hello , neovim”
⁃ Bool local isTrue = true
⁃ Table / list local list = {1, 2, 3}
⁃ For
⁃ While
⁃ If else
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
2024-07-22-tensorflow (google)和pytorch (faceebook)我该选哪一个。
layout: post title: ‘tensorflow 和pytorch 我该选哪一个。’ date: 2024-07-22T16:42:38-04:00
TensorFlow 和 PyTorch 是两种流行的深度学习框架,它们各有优点和适用场景。以下是它们的一些主要区别和特点:
TensorFlow是google的
优点:
- 成熟性和社区支持:TensorFlow 是由 Google 开发并维护的,拥有非常活跃的社区和丰富的资源。
- 部署灵活性:TensorFlow 在生产环境中的部署非常成熟,可以方便地部署到各种平台,包括移动设备和嵌入式设备。
- 生态系统丰富:TensorFlow 生态系统包括 TensorFlow Serving、TensorFlow Lite、TensorFlow.js 等工具,可以覆盖从训练到部署的全流程需求。
- 图计算:支持静态图计算(TensorFlow 2.x 也支持动态图),适合生产环境中的优化和部署。
缺点:
- 学习曲线:相比 PyTorch,TensorFlow 的学习曲线更陡峭。
- 灵活性:早期版本的 TensorFlow 灵活性较差,虽然 TensorFlow 2.x 引入了 Eager Execution 提高了灵活性,但在一些场景下仍然不如 PyTorch。
PyTorch
优点:
- 易于使用:PyTorch 的代码风格和调试方式更接近于 Python,本身更直观,适合研究和开发阶段。
- 动态图计算:默认使用动态图计算(Eager Execution),更符合 Python 用户的习惯,代码编写和调试更方便。
- 社区和发展速度:PyTorch 社区发展迅速,特别在学术界和研究领域有很高的接受度,很多新的研究论文和模型都首先在 PyTorch 上实现。
缺点:
- 部署和生产:虽然 PyTorch 也在逐步完善部署工具(如 TorchServe),但在生产环境中的部署相对于 TensorFlow 还略显不足。
- 生态系统:相比 TensorFlow,PyTorch 的生态系统稍逊一筹,但也在快速发展。
哪一个比较好?
选择 TensorFlow 还是 PyTorch 取决于你的具体需求和使用场景:
- 如果你的项目重视生产环境的部署和优化,且需要一个成熟的生态系统,那么 TensorFlow 可能更适合你。
- 如果你注重开发阶段的灵活性和易用性,特别是进行研究和快速原型开发,那么 PyTorch 是一个很好的选择。
实际使用场景:
- 学术研究和快速原型开发:PyTorch
- 大规模生产环境部署和综合生态系统:TensorFlow
希望这些信息对你选择合适的深度学习框架有所帮助。如果你有更多具体的需求或场景,可以进一步探讨。
Shortcuts for Next Step:
- input “1” for TensorFlow example project
- input “2” for PyTorch example project
- input “3” for comparison of specific features
Or, you can just type “continue” or “c”, I will continue automatically.
#tensorflow #pytorch
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Stable diffusion 就是稳定扩散 就是帮你产生图片。 用你的compt
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
device 到底怎么选 mps 还是cuda 还是cpu 如果你是苹果电脑的M1234 芯片 当然后mps优先了咯。 如果你有nvidia的gpu 那绝对是cuda啊!!!
has_mps = torch.backends.mps.is_built() device = ‘mps’ if has_mps else ‘cuda’ if torch.cuda.is_available() else ‘cpu’
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
苹果的MPS 是什么metal performance shaders 是一个后端。 是Apple的。 主要用在Apple的硬件加速… 苹果的MPS 是什么metal performance shaders 是一个后端。 是Apple的。 主要用在Apple的硬件加速(Macbook和iPhone)来做机器学习的计算的. Torch 里面可以利用apple设备进行操作的,牛逼啊device选择的时候除了cuda cpu 还可以选择mps了
import torch
检查是否编译了 MPS 后端
is_mps_built = torch.backends.mps.is_built()
print(f”Is MPS backend built: {is_mps_built}”)
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
把tensor 转换成numpy array的步骤,主要用于数据分析,不是计算了。直接对这个tensor呼叫numpy 就好了。… 把tensor 转换成numpy array的步骤,主要用于数据分析,不是计算了。直接对这个tensor呼叫numpy 就好了。 看下面的例子。 也就是torch对每个tensor 都有内置的方法,帮助你转换成numpy array
在numpy 里, np.array()是用来创建行的array的。跟我们有本质上的不同。我们有了tensor ,就不要费力气去numpy上创建新的array了,这样会降低我们的操作效率。
import torch
创建一个在GPU上的张量
tensor_gpu = torch.tensor([1, 2, 3], device=’cuda’)
将张量移动到CPU
tensor_cpu = tensor_gpu.cpu()
将张量转换为NumPy数组
numpy_array = tensor_cpu.numpy()
print(numpy_array) # 输出: array([1, 2, 3])
当你使用 .numpy() 方法时,它将一个 PyTorch 张量转换为一个 NumPy 数组。以下是详细解释:
- PyTorch 张量到 NumPy 数组的转换:
tensor.cpu():将张量从 GPU 移动到 CPU。tensor.cpu().numpy():将位于 CPU 上的张量转换为 NumPy 数组。
- NumPy 数组创建:
numpy.array(...)是直接创建一个 NumPy 数组的方法。
它们的作用是不同的:
numpy.array(...)创建一个新的 NumPy 数组。.numpy()是一个 PyTorch 张量的方法,用于将现有的张量转换为 NumPy 数组。
示例如下:
import torch
import numpy as np
# 创建一个 PyTorch 张量
tensor = torch.tensor([1, 2, 3])
# 将 PyTorch 张量转换为 NumPy 数组
numpy_array_from_tensor = tensor.numpy()
# 直接创建一个 NumPy 数组
numpy_array_direct = np.array([1, 2, 3])
print(numpy_array_from_tensor) # 输出: array([1, 2, 3])
print(numpy_array_direct) # 输出: array([1, 2, 3])
总结:
.numpy()是用于从 PyTorch 张量转换为 NumPy 数组的方法。numpy.array(...)是直接创建 NumPy 数组的方法。
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
CPU GPU 在torch上的自由转换 只有cpu上才可以对matrix进行numpy的一系列操作 如果我们在gpu上进行了torch。tensor的有效率的操作后,需要利用cpu上可以运行的library 比如说numpy进行下一步的分析。最好的是把这些数据炒从gpu拿回来 所以这里才会对我们的数据进行小点cpu()的操作。 torch 支持这样对tensor进行操作。 然后把他们拿回来,并且在cpu上创建位置后,我们进行常规操作了
print(f"Predicted class: {predicted_classes.cpu().numpy()}")
print(f"Expected classes: {y.cpu().numpy()}")
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
onehot encoding的categorical的问题,我们要拿到预测的标签,就可以直接说: Torch.argmax(output, -1) 为什么呢。 因为argmax 和one hot encoding有直接关系, 我们要的就是取得最大值的index 。而不是最大值。 这里的output 一般就是每个class的概率了。 我们只关心最大值。
永远记住只有在算loss的时候采用用这些概率进行cross entropy 也就是进行log 还有加上负号的操作。 如果你只是输出x的经过model的预测结果,出来直接就是概率了。
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
F string 的写法, 并且要在里面让某个value保留几位小数的方法 看到了吗,就是在花括号里面,对你感兴趣的那个variable进行冒号:和小点儿的f 的操作
1. 冒号
2. 小点
3. 写上数值
4. 加上f print(f"Epoch [{epoch + 1}/200], Loss: {loss.item():.4f}")
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Torch 里面的criterion 的另外一个名字就叫做loss criterion = loss
一般的nn.BCELoss() 这个就是主要针对binary的cross entropy 的loss 只要你看到是从nn里面出来的loss function,别人包装好的,一般就是直接私loss了。不是什么logit 之类的。 也不需要你再去写一遍negative log likelihood 的公式了。 empathy只是想告诉你远离,torch里面已经完美的handle了这些问题。 真的不需要你再继续造轮子了。
这些loss的function 比如 outputs = model(x) loss = criterion(outputs, y_onehot)
你看他接受什么,就是直接接受从模型出来后的output ,也就是一些我们模拟的概率了,再把他和我们的y one hot encode 之后的东西进行比较。 我们就可以说,这个loss 就是我们模型预测和真实的y之间相差了到底有多少。 你懂了吗,必须要给他模型的预测和真实的y。 有了这个返回的loss。 我们就可以在torch里面调用loss.backward() 只要你的loss是满足要求的,我们就可以利用torch写这句话 他就会开始给我们back propogation 然后我们就可以调用我们的optimizer 让他开始优化参数weight optimizer.step() that‘s it so elegant
🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️下一個筆記🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️🐿️
Adam优化是什么(adaptive moment estimation)也就是结合了动量法 和RMSProp的方法 Optim.Adam
主要是拿来处理稀疏梯度的问题。
他解决问题的方法就使用gradient的一阶和二阶矩阵来解决问题
gradient 的一阶矩 (动量)
gradient 的二阶矩 (learning rate 的自适应调整)
#匯總今日內容