机器学习的一般框架
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
数据科学开发工具
anaconda管理开发环境
jupyter编写整个数据处理流程
pycharm远程编写调试代码
ipdbpycharm dubug时偶尔出现一些bug可以用结合ipdb补充解决
数据开发六步
data
数据的获得、清洗、特征工程等预处理在这一步做最后有一点是共同的就是把准备好的数据进行“批量化”因为训练模型时必须把数据批量化最好的方法是生成数据迭代器供后面训练时使用。
# data
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
model
模型的定义、初始化。
model = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
model.apply(init_weights)
loss
定义损失函数本质上是两个向量之前的距离度量 y , y ^ y,\hat y y,y^ 之间的差距可以从几何角度、熵的角度考虑大部分可以证明是与概率极大似然等价的。
# loss
loss = nn.CrossEntropyLoss(reduction='none')
optimization
优化算法
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
train
《动手学习深度学习》http://zh-v2.d2l.ai/chapter_linear-networks/softmax-regression-concise.html这一节的代码有两个bug
- metric.add(float(l.sum()), accuracy(y_hat, y), y.numel()) 不同的数据不同的模型最后对模型表现进行平均没有什么意义
- trani loss、train acc两条线近似于平线并没有观察到训练的细节现象
这一步综合了前面的步骤有几个要点
1
。
1^。
1。 固定套路两层循环外层循环控制整个训练集使用的轮数内层循环控制batch
2
。
2^。
2。 为了便于调试超参数需要可视化训练过程在训练过程中需要计算train loss、train acc、test acc并以num_epochs、batch作为横坐标第一个图可视化整个流程宏观第二个图可视化第一个epoch训练细节微观过程。具体图例如下
3 。 3^。 3。 需要注意的是画图会特别慢所以描点不宜过多宏观20个点左右微观10-15个点左右。
# train
num_epochs = 20
# plt full epoch
animator = Animator(xlabel='epoch', ylabel='epoch', xlim=[1, num_epochs], ylim=[0., 1],
legend=['train loss', 'train acc', 'test acc'])
# plt each epoch
animator_batch = Animator(xlabel='batch', xlim=[1, 235], ylim=[0., 2],
legend=['train loss', 'train acc', 'test acc'])
for epoch in range(num_epochs):
# Set the model to training mode
if isinstance(model, torch.nn.Module):
model.train()
batch_idx = 0
for X, y in train_iter:
# Compute gradients and update parameters
y_hat = model(X)
l = loss(y_hat, y)
optimizer.zero_grad()
l.mean().backward()
optimizer.step()
# plt each epoch
if epoch == 0 and batch_idx % 23 == 0:
train_plt(animator_batch, batch_idx, model, train_iter)
batch_idx += 1
# plt full epoch
train_plt(animator, epoch, model, train_iter)