两种方式:
1、
直接取10个点的均值进行绘制,无中间步骤
(大致是这个意思,具体参考哪个博客找不到了)
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
loss=np.loadtxt('iter+loss.txt')#log文件
#loss=np.loadtxt('smoothloss.txt')#log文件
#第一列iter,第二列loss
x=loss[:,0]
y=loss[:,1]
fig=plt.figure(figsize=(7,5))
pd.Series(y,x).plot(label='loss')#原始曲线
pd.Series(y,x).ewm(span=10).mean().plot(label='smoth loss')#平滑后曲线
plt.show()
输出图像:
2、
smoothed_val=last*weight+(1-weight)*loss
#核心公式
先对数据进行处理,在用处理好的数据绘制曲线
代码:
import pandas as pd
import numpy as np
import os
fp=open('iter+loss.txt',"r", encoding='utf-8')
weight=0.85
last=0.0146
for line in fp.readlines():
iter=line.split(' ')
loss=line[-7:-1]
#print(loss)
loss=float(loss)
#print(type(loss))#str-->float
smoothed_val=last*weight+(1-weight)*loss#核心公式
last=smoothed_val
with open('smoothloss.txt','a') as fp2:
fp2.write(iter[0]+' '+str(smoothed_val)+'\n')
fp.close()
处理前:
处理后:
输出图像: