没有合适的资源?快使用搜索试试~ 我知道了~
首页记录模型训练时loss值的变化情况
记录训练过程中的每一步的loss变化 if verbose and step % verbose == 0: sys.stdout.write('\r{} / {} : loss = {}'.format( step, total_steps, np.mean(total_loss))) sys.stdout.flush() if verbose: sys.stdout.write('\r') sys.stdout.flush() 一般我们在训练神经网络模型的时候,都是每隔多少步,输出打印一下loss或者每一步打印一下loss,今天发现了另一种记录loss变化的方法,就是用
资源详情
资源评论
资源推荐

记录模型训练时记录模型训练时loss值的变化情况值的变化情况
记录训练过程中的每一步的loss变化
if verbose and step % verbose == 0:
sys.stdout.write('{} / {} : loss = {}'.format(
step, total_steps, np.mean(total_loss)))
sys.stdout.flush()
if verbose:
sys.stdout.write('')
sys.stdout.flush()
一般我们在训练神经网络模型的时候,都是每隔多少步,输出打印一下loss或者每一步打印一下loss,今天发现了另一种记录
loss变化的方法,就是用
sys.stdout.write(‘{} / {} : loss = {}’)
如图上的代码,可以记录每一个在每个epoch中记录用一行输出就可以记录每个step的loss值变化,
就是输出不会换行,因此如果你想同一样输出多次,在需要输出的字符串对象里面加上””,就可以回到行首了。
sys.stdout.flush() #一秒输出了一个数字
具体的实现就是下面的图:
这样在每个epoch中也可以观察loss变化,但是只需要打印一行,而不是每一行都输出。
补充知识:补充知识:训练模型中损失(训练模型中损失(loss)异常分析)异常分析
前言前言
训练模型过程中随时都要注意目标函数值(loss)的大小变化。一个正常的模型loss应该随训练轮数(epoch)的增加而缓慢下
降,然后趋于稳定。虽然在模型训练的初始阶段,loss有可能会出现大幅度震荡变化,但是只要数据量充分,模型正确,训练
的轮数足够长,模型最终会达到收敛状态,接近最优值或者找到了某个局部最优值。在模型实际训练过程中,可能会得到一些
异常loss值,如loss等于nan;loss值忽大忽小,不收敛等。
下面根据自己使用Pythorh训练模型的经验,分析出一些具体原因和给出对应的解决办法。
一、输入数据一、输入数据
1. 数据的预处理数据的预处理
输入到模型的数据一般都是经过了预处理的,如用pandas先进行数据处理,尤其要注意空值,缺失值,异常值。
缺失值:数值类型(NaN),对象类型(None, NaN),时间类型(NaT)
空值:””
异常值:不再正常区间范围的值
例如对缺失值可以进行判断df.isnull()或者df.isna();丢弃df.dropna();填充df.fillna()等操作。
输入到模型中的数据一般而言都是数值类型的值,一定要保证不能出现NaN, numpy中的nan是一种特殊的float,该值数值运算
的结果是不正常的,所以可能会导致loss值等于nan。可以用numpy.any(numpy.isnan(x))检查一下input和target。
2. 数据的读写数据的读写
例如使用Pandas读取.csv类型的数据得到的DataFrame会添加默认的index,再写回到磁盘会多一列。如果用其他读取方式再读
入,可能会导致数据有问题,读取到NaN。

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0