- python可以定义class,而且不一定要有初始化函数init
- nn.Module是所有神经网络的基类,任何pytorch模型都应该继承于它
- 上游/下游任务:上游任务指对数据做预处理,如:分词、过滤、生成词向量等,上游任务的结果作为下游任务的输入;下游任务是你在什么数据集上干的什么事,比如做分类任务,问答任务
- lamuda是匿名函数,可快速实现功能
- *args是所有的参数列表,**kwargs是所有的变量参数字典
- linux服务器上plt.show()是不会显示图片的,可以在import plt之前加入
import matplotlib as mpl mpl.use('Agg')
然后用plt.savefig("test1_1.png")
保存为图片 - random.shuffle()用于将一个列表中的元素打乱顺序,值得注意的是使用这个方法不会生成新的列表,只是将原列表的次序打乱
- range(num)产生的是0到num-1的整数列表;range(start, stop[, step])的区间是[start,stop],步长是step
- pytorch里的tensor是多维数组,longtensor就是64位整数的多维数组
- python里a[1:3]就是输出a[1]和a[2]
- 矩阵MXN就是M行N列,是没有维数的。而数据维数的。
- 带yield的函数是个生成器,有个blog写的挺好的,详情见yield说明
- super(Net, self).init()就是Net类先调用一下Net类的父类的初始化函数
- nn.Linear(输入的个数,输出的个数,是否使用偏置) 就是做线性变换
- 可以用nn.Sequential来更加方便地搭建网络,Sequential是一个有序的容器,网络层将按照在传入Sequential的顺序依次被添加到网络中
net = nn.Sequential(
nn.Linear(num_inputs, 1)
)
net = nn.Sequential()
net.add_module('linear', nn.Linear(num_inputs, 1))
from collections import OrderedDict
net = nn.Sequential(OrderedDict([
('linear', nn.Linear(num_inputs, 1))
]))
- 定义优化算法
optimizer = optim.SGD(net.parameters(), lr=0.03)
optimizer =optim.SGD([
{'params': net.subnet1.parameters()},
{'params': net.subnet2.parameters(), 'lr': 0.01}
], lr=0.03)
- pytorch中view的用法传送门
- plt的plot讲x和y对应起来,并绘图。plot是绘制折线图,scatter是散点图,bar是条形图,barh就会让柱状图横过来,hist是统计直方图,用法和参数都一样。
- python里[]是列表,()是元组,{}是字典
- numpy.array好像是个数组,这里的arange就是array(range())
type就是array的类型,array.dtype就是里面数据的类型。
numpy里取几位小数就是array.round(几位) - numpy数组的维数,一般不会超过三维
- numpy的二维数组相加减乘除都是对应位置的数值进行加减乘除,如果形状不统一,则是小的数组一行一行或者一列列拿到大的数组里去计算。
- np的随机方法
- np中常见的统计函数
- pandas就是在np的基础上帮助处理非数值型的数据(np主要是针对数值型数据)。
- series是带索引的一维数组,dataframe是二维数组,是series容器。dataframe的行叫Index,列叫columns
- df的一些属性和函数
- df取行或者列的注意事项
- 服务器里可以更换python的版本,也就是类似conda install python=3.8.8
- python if里的变量在外部可见
- torch.init.normal_:给tensor初始化,一般是给网络中参数weight初始化,初始化参数值符合正态分布;torch.init.constant_:初始化参数使其为常值,即每个参数值都相同。一般是给网络中bias进行初始化
- iter(test_iter).next()就是迭代器的下一个项目
- python的print函数的正确写法
print('epoch: %d, test_ acc: %.5f, train_l: %.5f, train_acc: %.5f' % (i + 1, test_acc_sum / n, train_l_sum / n, train_acc_sum / n))
- assert是断言,满足条件则继续,否则报错
- torch.matmul是高维的矩阵乘法
- isinstance判断两类是不是一种类型,而且子类也是父类的一种类型
- 如果用dropout时,在测试经度的时候要关掉dropout的功能,这一块的代码如下,感觉挺重要的:
# 本函数已保存在d2lzh_pytorch def evaluate_accuracy(data_iter, net): acc_sum, n = 0.0, 0 for X, y in data_iter: if isinstance(net, torch.nn.Module): #如果net是继承nn.Moudel net.eval() # 评估模式, 这会关闭dropout acc_sum += (net(X).argmax(dim=1) == y).float().sum().item() net.train() # 改回训练模式 else: # 如果net是自定义的模型 if('is_training' in net.__code__.co_varnames): # 如果有is_training这个参数 # 将is_training设置成False acc_sum += (net(X, is_training=False).argmax(dim=1) == y).float().sum().item() else: acc_sum += (net(X).argmax(dim=1) == y).float().sum().item() n += y.shape[0] return acc_sum / n
- enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列
- GC含量愈高,DNA的密度也愈高,同时热及碱不易使之变性,因此利用这一特性便可进行DNA的分离或测定。Bio.SeqUtils.GC() 函数时会自动处理序列和可代表G或者C的歧意核苷酸 字母S混合的情况,如GC(my_seq)。
- python里[m::n]其中m是开始取的位置,n是步长。
- Biopython里的%s是字符串。
- str.join(sequence)将序列sequence中的元素以指定的字符str连接生成一个新的字符串
- BioPython里complement()和reverse_complement()很容易得到seq的互补序列和反向互补队列
- Biopython里的transcribe()是从编码链转录mRNA。back_transcribe()是从mRNA逆转录为DNA编码链。
- 可以由 coding_dna.translate(table=2, to_stop=True)将mRNA和DNA翻译成蛋白质,这个table是选择选择翻译表的,to_stop=True则可以翻译到第一个终止密码子就结束,否则全部翻译且用*分开。
- python代码过长可以用()或者 \ 分行
- condon是密码子的意思。
- Biopython里的seq对象都是只读的,如果想要可写,则要变成MutableSeq(mutable可变)对象。
- 终于明白为什么要用flatten层了,比如最开始输入的时候,为了把数据展开成一维,就可以变成向量输入了,降低维度。
- 以及softmax函数是平滑归一化指数函数,为了找出最大的那个数。
- json.dumps将一个Python数据结构转换为JSON
- re.compile ()是用来优化正则的,它将正则表达式转化为对象
- Path.mkdir用于创建文件夹
- 自定义tf.keras.callbacks.Callback:https://blog.csdn.net/frostime/article/details/105083151
- tf.reduce_mean是tf中算期望和均值的函数,可见blog
- nvidia-smi可以查看显存使用情况
- CUDA_VISIBLE_DEVICES=0 python train.py可以指定GPU跑代码
- tf按需分配内存超链接
- 运行代码可以翻页查看结果:python train.py | less,按上下键即可翻页,按q可退出
- 没有tf.log,只有tf.math.log
- tf里的计算,矩阵计算就得矩阵
- tf.reduce_mean不设置axis默认把所有数据求平均
- 导入上下级的包只需要在对应目录添加_init_.py空文件,自动识别为包
- python -m xx.xx.xxx命令,自动识别为模块并运行,后缀不能添加py