d2l机器学习相关代码速记
1. 一些基础代码
1.1 给代码加进度条
在训练的时候一般都耗时非常之长,增加一个进度条可以很好的缓解训练时候的焦虑(对我而言非常)
- 安装 tqdm 包
pip install tqdm
- 导入尝试下感觉
import time
from tqdm import trange
for i in trange(100):
# do something
time.sleep(0.1)
100%|██████████| 100/100 [00:10<00:00, 9.23it/s]
- 将进度条放入代码,将原来的range替换成trange。这样在训练的时候就可以有进度条了
0%| | 0/100 [00:00<?, ?it/s]
100%|██████████| 100/100 [01:52<00:00, 1.13s/it]
折1,训练log rmse0.044815, 验证log rmse0.029582
100%|██████████| 100/100 [01:51<00:00, 1.12s/it]
折2,训练log rmse0.131946, 验证log rmse0.134651
100%|██████████| 100/100 [01:53<00:00, 1.14s/it]
折3,训练log rmse0.046287, 验证log rmse0.036686
100%|██████████| 100/100 [01:48<00:00, 1.09s/it]
折4,训练log rmse0.048282, 验证log rmse0.040335
100%|██████████| 100/100 [01:44<00:00, 1.05s/it]
折5,训练log rmse0.015416, 验证log rmse0.045232
显示大概如上,我是很舒适了
1.2 查看数据
这个是查看数据的维度,长宽高
print(train_data.shape)
print(test_data.shape)
(47439, 41)
(31626, 40)
切片的方式查看数据
print(train_data.iloc[0:4, [0, 1, 2, 3, -3, -2, -1]])
查看数据中所以的类别信息
all_features.info()
查看数组all_features 中 object的信息
for in_object in all_features.dtypes[all_features.dtypes=='object'].index:
print(in_object.ljust(20),len(all_features[in_object].unique()))
可以用做删除一些列信息,以标题作为索引,直接删除数据
'''
删除redundant_cols列表中所列出的内容,作者认为这个部分是多余的数据
'''
redundant_cols = ['Address','Summary','City','State']
for c in redundant_cols:
del test_datac[c],train_datac[c]
显示所有列的信息
train_data.columns
查看数据长度
有两个方式 1.len的方式查看,2. shape的方式查看
两个差异如何不清楚,但一个无法使用的时候可以都试试
len(mnist_train), len(mnist_test)
(60000, 10000)
mnist_train[0][0].shape
torch.Size([1, 28, 28])
1.3 给代码添加计时
这边使用的是d2l的代码,
class Timer: #@save
"""记录多次运行时间"""
def __init__(self):
self.times = []
self.start()
def start(self):
"""启动计时器"""
self.tik = time.time()
def stop(self):
"""停止计时器并将时间记录在列表中"""
self.times.append(time.time() - self.tik)
return self.times[-1]
def avg(self):
"""返回平均时间"""
return sum(self.times) / len(self.times)
def sum(self):
"""返回时间总和"""
return sum(self.times)
def cumsum(self):
"""返回累计时间"""
return np.array(self.times).cumsum().tolist()
c = torch.zeros(n)
timer = Timer()
for i in range(n):
c[i] = a[i] + b[i]
f'{timer.stop():.5f} sec'
‘0.04926 sec’
调用start 就可以开始计时,使用stop就可以打印出相关的时间
timer.start()
d = a + b
f'{timer.stop():.5f} sec'
‘0.00000 sec’