上一期奇技淫巧发布以后,出乎意料的上了热搜,汗。这次内容是一个月前的blink,是对自己一个月前的编程学习总结。
一点点python
python中json.dumps()与json.dump()的区别【解决:TypeError: dump() missing 1 required positional argume: ‘fp’】 二者区别在于,dumps() 是将数据变成字符串,赋值变量后不会保存 dump需要一个文件接收该字符串,同时会返回一个字符串,即写入文件+赋值变量 https://blog.csdn.net/forever_008/article/details/104325402 与之类似的是loads和load 2. os.getcwd()得到的是当前工作目录,通常需要在该目录下新建目录或文件,会有一个针对当前目录的相对目录。如果要求得到该文件的绝对路径,一个稳妥的做法是将os.getcwd()和相对路径拼接os.path.join() https://blog.csdn.net/dmt103/article/details/106170431/ 这是abspath()的源码,可以看到其工作原理同上,但容易拼错,不推荐使用。 3. 实现count计数的三种方法 https://www.jianshu.com/p/babedec0c1f4 ① np.unique,该方法会返回重复变量的次数和变量名。 ② collections.Counter 这是python官方的库,是一个类 ③ np.sum( a == 1 ) 这样子累加 此外针对特定元素,可以使用python官方的方法count(),常用的还有index
Python中os.mkdir()与**os.makedirs()**的区别及用法 os.mkdir()只能创建一级新的目录,不能一个命令就创建很深的目录 os.makedirs()可以创建很深的目录 os.makedirs()有一个mode,exist_ok,默认是False,如果要创建的目录已经存在,就会抛出异常 https://blog.csdn.net/yangsong95/article/details/82229238 推荐使用os.makedirs(),养成习惯 5. 字符串比对是一个个字符挨个比的 所以‘-137.39452108724’> ‘-137.39238197158’ 在读取文件的时候,一定要记得把强制类型转化字符串为浮点型数据 6. pycharm使用小窍门:
- 撤销与反撤销操作:Ctrl + z,Ctrl + Shift + z
- view菜单栏里可以把toolbar调出来,toolbar里有一个前进后退的按钮,很方便查询不同的文件
- 快捷键Ctrl + Shift + F调出查询窗口,可以在整个project等不同领域里查询字段。Ctrl + F可以在当前文件里查询字段
注意:搜狗输入法把Ctrl + Shift + z和Ctrl + Shift + F占用了,需要修改其设置 参考: https://www.cnblogs.com/sui776265233/p/10168052.html https://blog.csdn.net/viviliao_/article/details/79647358 查看函数列表 https://www.cnblogs.com/lm3306/p/9770637.html alt+F7可以查找引用,或者选择对象右键,可以看到find usage。需要注意,find scope要选取适当,选在当前文档可以查找当前文档中的引用
os.path.relpath() 获取相对路径的一个函数 https://blog.csdn.net/Hunter_Murphy/article/details/108043298 返回start后的路径,start没有填写时或者是空字符串时,返回相对于当前工作目录的相对路径 8. ’ '.join()函数使用时需要注意,列表里的数据只能是str,不能是浮点数,整型数 9. Numpy数组(ndarray)中含有缺失值(nan)行和列的删除方法 https://blog.csdn.net/qq_18351157/article/details/104633551 10. pandas的dataframe和series在排序后索引并没有变 场景:找出排序靠前的值 排序:df_e_sort = df_e.sort_values(by=‘Energy’, ascending=True) 这时如果用
for i in range(100):
df_e_sort['Energy'][i]
得到的不是前100个 应该用enumerate
for index, path in enumerate(df_e_sort['Path']):
if index == low_e_num:
break
else:
low_e_path_list.append(path)
这个问题后来有了新的解决方法: 利用series的index属性来实现。它可以看作是行号排序后的一个列表
df['cage path'][energys.index[0]]
报错: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify ‘dtype=object’ when creating the ndarray bboxes = np.array(bboxes) 这种报错主要是因为从列表转化成array的时候,二维列表的维度不统一。比如:[ [ 1, 2 ], [2, 3], [ 1 ] ] 转化成numpy的时候会报错,但不影响使用 如果把这种维度不一致的数据存成.npy格式的文件,读取该文件时,使用正常的np.load会报错 应该加上allow_pickle=True
names = np.load(path_2d, allow_pickle=True)
之后可以正常使用 12. pycharm直连服务器里的python https://www.cnblogs.com/fanzhongjie/p/11439103.html 不用wsl,一步到位,调用服务器里的python 每次登陆pycharm,如果需要连接远程编译器,则需要右下角确认编译器,如果终端窗口需要设为远程,则应点击tool/start ssh session
https://www.cnblogs.com/wangshicheng/p/10827061.html 文章不能只看一半,pycharm调试远程代码 在borwse这里可以修改远程代码
选择Ubantu里的python,就选择了Ubantu里面某个子环境 选择remote里的python,就选择了集群上的某个子环境 选择conda下面的python,就选择了conda环境 感悟: 选择了某个环境里的bin/python 系统默认,该环境里的其他包也可以使用,可以import 即:选择环境(在操作上)= 选择某个环境里的bin/python 记录一下灵异事件:①切换编译器中的python bin文件,并不能改变整个环境,需要重新在tool deployment configuration里修改②改完以后还是不能正常显示包,点击python console以后即可。 14. 一种在函数中设定缺省值的方法 15.
pathlib.PurePath(task.task_work_path).as_posix()
可以将\\,变为/,和下面两种方式等同,但是会更简洁,得到的变量是str类型
'/'.join( xxx.split('\\' ) )
xxx.replace('\\', '/')
seaborn绘制数据分布图 如果想要对比两组数据,可以用
fig = plt.figure()
sns.histplot(force, color='brown')
sns.histplot(force_2, color='blue')
画出直方图
sns.kdeplot(force)
sns.kdeplot(force_2)
画出密度图 但二者不能画在同一张上,因为kde的y轴刻度较小,histy轴是count,较大,画在1张上会看不到kde displot可以将同一组数据的kde和hist画在一张图上,y轴只能选一个,默认取hist的y轴 但是displot不可以把两组数据画在一张图上,一个displot是一个figure,不需要fig=plt.figure()新建画布 综上,如果要对比两组数据的分布,只能单独对比kde或者hist,不能用displot,这已经可以满足需求了 17. pycharm快捷键 ctrl + 空格 可以自动补全 但是该快捷键是微软和搜狗的热键 ①解决微软热键https://www.zhihu.com/question/36005148 ②解决搜狗热键https://ask.zol.com.cn/x/3928514.html 18. strip不仅可以去除空格,还能去除换行符 19. https://jingyan.baidu.com/article/6fb756ec71f73e241858fb2b.html 更换pycharm里的shell,从power shell换成命令行 20. 21. pycharm里 shift + ↑ 可以选中当前行,按两次可以选中两行 之后 ctrl + shift + ↑ 可以将该行所在的整个方法往上移,而且与上方交互的也是整个方法。当然,前提是选中函数段首,如果只选中了一句话,无法实现整个方法的前移 alt + shift + ↑ 仅上移一句话,跟单行交互 22 关于浅复制和深复制的一个帖子,很形象 https://blog.csdn.net/u010712012/article/details/79754132
一点点linux
1.linux系统对.tar.bz2文件解压的命令 2. 有的包只能在linux上装,怎么办? 在win系统下安装Ubantu,在Ubantu里装conda,在conda里新建环境,安装自己的包 下载pycharm专业版,在编译器选择里,选择,Ubantu路径下,指定环境里的bin/python 这时候就可以在pycharm里快乐的debug了 https://blog.csdn.net/frank_haha/article/details/114847124?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163377843616780261925780%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163377843616780261925780&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-1-114847124.pc_v2_rank_blog_default&utm_term=Ubantu&spm=1018.2226.3001.4450 3. https://blog.csdn.net/xxmonstor/article/details/80507769 每天一句linux命令 根目录下查找文件 find / -name httpd.conf httpd.conf是文件名
一点点神经网络
https://zhuanlan.zhihu.com/p/274523212 https://blog.csdn.net/weixin_43896398/article/details/84762886 两篇循环学习率的博客 2. https://blog.csdn.net/dcrmg/article/details/80017200 转载tensorflow的学习率 3. 构建resnet的过程中,如果输出层是输入层的2倍,那么就把输入层乘以2,和输出结合 If the outer layer is of twice size as the inner layer, then the inner layer is copied and concatenated, then a ResNet architecture is built between them. 4. tensorflow 2.0版本改动了大量语法,这个时候如果还想用1+版本语法,可以:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
但是这句话可以运行成功的前提是,本机上需要有1+版本的tensorflow,需要再装一个 或者直接尝试下面两行
import tensorflow._api.v2.compat.v1 as tf
tf.disable_v2_behavior()
都试一试 5. softmax函数理解 一个多分类问题,神经网络在输出预测值时往往有很大浮动,而正确标签只有一个
所以softmax就是把各输出值归一化,变成0~1之间的概率 同时方便反向求导 6. one_hot是机器学习领域里常用名词,其核心内涵是把非结构化的字符串等标签转化成结构化的二进制标签 比如:这篇文章末尾举的例子https://zhuanlan.zhihu.com/p/37471802 假设“花”的特征可能的取值为daffodil(水仙)、lily(百合)、rose(玫瑰)。one hot编码将其转换为三个特征:is_daffodil、is_lily、is_rose,这些特征都是二进制的。 7. tensorboard scalar背景图中的虚线是未经过平滑处理的变化趋势 https://www.zhihu.com/question/275900999 8. 随手记:tensorboard使用时的注意事项:①保证调用的tensorboard环境变量在当前编译器的范围内,比如说,调用的tensorboard是在conda下面的,此时不要用集群上的python或者虚拟机里的python。②不要挂外网,因为生成的内容在本机local host下才能查看。③命令是=,不加“引号”。。
tensorboard --logdir=mnist_train
一个step是一个batch,更新一下整个网络的参数 一个epoch是把整个数据集过一遍
一个epoch的进度条终点是size/batch_size向上取整 一个batch_size网络forward一次,backward一次,更新一次参数
log_softmax+nll_loss = softmax + crossEntropy 只不过是把交叉熵的log步骤提前了,这样做可以提高运行速度,同时可以防止数值下溢 11. https://blog.csdn.net/reallocing1/article/details/56292877 常用的几个误差 12 pytorch里面使用transform对数据进行预处理,使用random_split_partial实现对数据集的划分 13 pytorch中保存网络参数,利用训练好的网络推理,利用已知网络参数初始化下一次训练的网络,迁移学习等等。可以参考这一篇 https://zhuanlan.zhihu.com/p/417997662
需要注意的是,在训练完网络以后,利用网络去做推理时,应设置model.eval()和with torch.no_grad() https://www.cnblogs.com/BlueBlueSea/p/14616416.html
目的是让BN层和dropout层失效,不然的话,会造成严重后果 https://blog.csdn.net/wuqingshan2010/article/details/106013660 14 stackoverflow上面关于model.eval()和torch.no_grad()的一个回答
一点点量化知识
决定原子轨道波函数有四个量子: 主量子数 n,角量子数 l, 磁量子数 m, 自旋量子数 m_s 主量子数决定能量,角量子数决定磁矩大小,磁量子数决定了轨道角动量在z方向上的分量 2. acsf: 采用角度和距离描述原子局域环境 采用高斯激活函数 原子 i 和原子 j 的距离是一个定值,只能激活特定 偏移量 和 宽度 的高斯函数 如果把距离矩阵当做二维格子,高斯基组是二维格子背后的几十个神经元,高斯基组对应的值是该神经元被激活的程度,这样一个二维的距离矩阵,被三维的神经元矩阵所表征,从而提取出内含的化学信息。
可以结合二维图像的embedding理解 假设是单通道黑白图像,灰度值矩阵对应了距离矩阵。 这里并没有把矩阵压缩成一维,再作为cnn的输入 而是,用几十个高斯基组将灰度值映射到3维神经元矩阵,再将该矩阵作为输入 3. tips:波函数的正负并没有实际意义,波函数本身就没有特定的物理含义,只有波函数的模平方有物理含义 https://www.zhihu.com/question/26624712
杂
unsigned long long ,long long ,int 等其他的数据的范围 https://blog.csdn.net/wuxiaowu547/article/details/80626922 2. 冷知识:目录(directory)和文件夹(folder)是有区别的,简单说,目录范围更小,仅包括存储在物理磁盘上的文件夹,不包括「计算机」、「回收站」、「控制面板」等这些虚拟文件夹。文件夹囊括所有可双击打开的文件夹。 https://www.cnblogs.com/xenophon/p/10231762.html 文件夹包括目录 3. github提交代码,clone代码,这些操作强烈建议学习pycharm,实在是太香了 4. 偶尔看到的,很有意思的水塘抽样 https://zhuanlan.zhihu.com/p/29178293 5. deepmd global_cvt_2_ener_float 改变张量的精度 6. symlink的文件本体不能删除,不然symlink就变空,需要注意 7. win cmd跨盘符 https://jingyan.baidu.com/article/39810a233d305bf636fda6c6.html
|