习题链接:http://datawhale.club/t/topic/579/7
任务四以及任务五的第一题是完整的做完的,任务五的其余小问把能做的尽量都做了。时间处理部分完成的还是不太ok,这部分没有熟练掌握,所以难哭了…等之后熟练之后会重新做的。还有呀,我之前觉得理解稍微有点困难的长宽表转换,现在用得66的哈哈哈,真有大用处!
暑假再开课的时候,我一定还要再学一遍!谢谢Datawhale这么好的资源和平台,以及Datawhale中这一群有能力有想法的人儿们~最后再谢谢耿老师!!!耐心且及时的答疑!!!耿老师之后要开的课,我都报名!哈哈哈
【任务四】显卡日志
下面给出了3090显卡的性能测评日志结果,每一条日志有如下结构:
Benchmarking #2# #4# precision type #1#
#1# model average #2# time : #3# ms
其中#1#代表的是模型名称,#2#的值为train(ing)或inference,表示训练状态或推断状态,#3#表示耗时,#4#表示精度,其中包含了float, half, double三种类型,下面是一个具体的例子:
Benchmarking Inference float precision type resnet50
resnet50 model average inference time : 13.426570892333984 ms
请把日志结果进行整理,变换成如下状态,model_i用相应模型名称填充,按照字母顺序排序,数值保留三位小数:
【数据下载】链接:https://pan.baidu.com/s/1CjfdtavEywHtZeWSmCGv3A 提取码:4mui
【我的思考】:
- 首先是需要把txt文件中相应有用的信息(
模型名字, Train or Inference, Float or Half of Double, 时间
)提取出来。 - 然后就是将信息存入表中的问题,我是先尝试将一条信息提取出来,然后再尝试将它存入表中。过程中就启发了我,将每一条(即每两行)的信息存入列表中,再将列表的值赋值为DataFrame表的一行。
- 看到目标格式让我想到了可以长宽表的转换。
【我的解答】:
- 读取txt文件内容
import numpy as np
import pandas as pd
df = pd.read_table('benchmark.txt', header=None)
df
发现所有的内容都在df[0]
里面,没有按照分行存储。其实自己也有思考了使用sep来设定空格为分隔符的,但是发现提取出来更乱了。
- 新建一个DataFrame表来存储有用的信息
df_final = pd.DataFrame(columns= ['model_name', 'Train_Infer', 'FHD', 'Time'])
df_final
- 我们可以发现每两行为一个信息,所以将每两行的关键信息存储到一个列表中,再将其赋值给DataFrame的行。
for i in range(0, len(list(df[0]))-1, 2):
temp = []
temp.append(list(df[0])[i].split(' ')[5])
temp.append(list(df[0])[i+1].split(' ')[4])
temp.append(list(df[0])[i].split(' ')[2