20240512 开始学习~(慢慢整理)
由于自己太菜,开一章学习Python(pytorch)-DAG
目前起点: d2l
torch :
首先要学会看帮助和说明
$\color{red}{dir(), help()}$ 函数
dir(torch)
['AVG', 'AggregationType', 'AliasDb', 'Any', 'AnyType', 'Argument', 'ArgumentSpec', 'AwaitType', 'BFloat16Storage', 'BFloat16Tensor', 'BenchmarkConfig', 。。。]
dir(torch.Any)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
help(torch.Any.__dict__)
Help on mappingproxy object:
class mappingproxy(object)
| Methods defined here:
|
| __contains__(self, key, /)
| Return key in self.
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
1. Python基础
2. Pytorch基础 (见下方)
Pytorch核心卖点:Dynamic Computation Graph 动态图
有向无环图DAG (Directed Acyclic Graph)
于tensors计算的数值(应该是导数二阶导等)用一个函数存储下来。
PyTorch中的有向无环图(DAG)是表示神经网络计算流程的重要概念。它以图形化的方式展示了数据如何在网络中流动,以及如何对数据应用各种操作。DAG由节点和边组成,其中节点表示操作或计算,边表示节点之间的数据流和依赖关系。
DAG在PyTorch中的主要特点:
- 节点:
- DAG中的节点表示对数据进行的各种操作或计算。
- 这些操作可以包括数学函数、激活函数、损失函数等。
-
每个节点接受一个或多个输入,并产生一个输出。
-
边:
- DAG中的边表示数据在节点之间的流动和依赖关系。
- 数据从输入节点流向中间节点,最终到达输出节点。
-
边决定了计算的执行顺序。
-
无环性:
- DAG是无环的,意味着图中没有循环或环路。
-
这个特性确保了计算可以按顺序执行,从输入节点开始,逐步向输出节点进行。
-
自动微分:
- PyTorch利用DAG来执行自动微分,这对于训练神经网络至关重要。
- 在前向传播过程中,PyTorch动态地构建计算图,记录操作及其依赖关系。
-
在反向传播过程中,PyTorch按照相反的顺序遍历图,使用微积分的链式法则计算损失对模型参数的梯度。
-
动态图:
- PyTorch使用动态计算图,允许灵活性和动态计算。
-
图是在前向传播过程中动态创建的,支持可变长度的序列和控制流语句。
-
张量操作:
- DAG中的节点通常对张量进行操作,张量是PyTorch中的多维数组。
-
张量用于表示输入数据、模型参数和中间计算结果。
-
优化:
- DAG有助于高效地优化神经网络。
- 通过跟踪计算及其依赖关系,PyTorch可以自动计算梯度,并使用随机梯度下降(SGD)等优化算法更新模型参数。
理解有向无环图对于使用PyTorch构建神经网络至关重要。它提供了计算流程的清晰表示,并支持自动微分,使得训练和优化深度学习模型更加容易。DAG允许高效计算、动态图构建以及灵活处理各种类型的数据和操作。
1. Python基础:
https://pythoncat.top/posts/2018-10-11-file
格式(写法风格):
Google Python Style Guide
https://google.github.io/styleguide/pyguide.html
- Python文件读写指南(
with
语句是初学者必会常识)
https://pythoncat.top/posts/2018-10-11-file
1. 如何将列表数据写入文件?
2. 如何从文件中读取内容?
3. 多样需求的读写任务
4. 从with语句到上下文管理器
当多段分散的字符串存在于列表中的时候,要用writelines()
方法
# 以下3种写法等价,都是写入字符串“python is a cat”
In [20]: with open('test.txt','w') as f:
...: f.writelines(['python',' is',' a',' cat'])
...: f.writelines('python is a cat')
...: f.write('python is a cat')
# 以下2种写法等价,都是写入列表的字符串版本“['python',' is',' a',' cat']”
In [21]: with open('test.txt','w') as f:
...: f.write(str(['python',' is',' a',' cat']))
...: f.writelines(str(['python',' is',' a',' cat']))
# 作为反例,以下写法都是错误的:
In [22]: with open('test.txt','w') as f:
...: f.writelines([2018,'is','a','cat']) # 含非字符串
...: f.write(['python','is','a','cat']) # 非字符串
# 若有的元素不是字符串,则要for一个个处理
In [37]: content=[1,' is',' everything']
In [38]: with open('test.txt','w') as f:
...: for i in content:
...: f.write(str(i))
- 读取:
所有行一次性全读:
In [47]: with open('test.txt','r') as f:
...: print(f.read())
1 is everything.
python is a cat.
this is the end.
In [48]: with open('test.txt','r') as f:
...: print(f.readlines())
['1 is everything.\n', 'python is a cat.\n', 'this is the end.']
只读一行(避免性能问题)
In [49]: with open('test.txt','r') as f:
...: print(f.readline())
- 上下文管理器(保障程序所能接触到的资源固定合理)
from contextlib import contextmanager
@contextmanager
def open_file(name):
ff = open(name, 'w')
ff.write("enter now\n")
try:
yield ff
except RuntimeError:
pass
ff.write("exit now")
ff.close()
with open_file('test.txt') as f:
f.write('Hello World!\n')
contextmanager 是要使用的装饰器,yield 关键字将普通的函数变成了生成器。yield 的返回值(ff)等于上例__enter__()的返回值,也就是 as 语句的值(f),而 yield 前后的内容,分别是__enter__() 和 exit() 方法里的内容。
使用 contextlib,可以避免类定义、enter() 和 exit() 方法,但是需要我们捕捉可能的异常(例如,yield 只能返回一个值,否则会导致异常 RuntimeError),所以 try…except 语句不能忽略。
2. Pytorch基础:
MINST (FashionMINST 由于初始MINST数据集就10个数字0,1,2…9十分类过于简单,所以用时尚潮流数据集种类多一点)
We’ll use the FashionMNIST dataset to train a neural network that predicts if an input image belongs to one of the following classes: T-shirt/top, Trouser, Pullover, Dress, Coat, Sandal, Shirt, Sneaker, Bag, or Ankle boot.
1. T-shirt/top上衣T恤
2. Trouser 裤子
3. Pullover - 套头毛衣
4. Dress 裙子
5. Coat 夹克
6. Sandal - 凉鞋
7. Shirt - 衬衫
8. Sneaker 拖鞋
9. Bag 包
10. Ankle boot - 短靴/踝靴
(TBC 待续)