paddle.save 是如何保存state_dict,Layer对象,Tensor及包含Tensor嵌套等
收藏
paddle.save 是如何保存state_dict,Layer对象,Tensor以及包含Tensor的嵌套list、tuple、dict的呢?
旧鸱c_
已解决
2#
回复于2021-08
对于state_dict保存方式与paddle2.0完全相同,我们将Tensor转化为numpy.ndarray保存。 对于其他形式的包含Tensor的对象(Layer对象,单个Tensor以及包含Tensor的嵌套list、tuple、dict),在动态图中,将Tensor转化为tuple(Tensor.name, Tensor.numpy());在静态图中,将Tensor直接转化为numpy.ndarray。之所以这样做,是因为当在静态图中使用动态保存的模型时,有时需要Tensor的名字因此将名字保存下来,同时,在load时区分这个numpy.ndarray是由Tenosr转化而来还是本来就是numpy.ndarray;保存静态图的Tensor时,通常通过Variable.get_value得到Tensor再使用paddle.save保存Tensor,此时,Variable是有名字的,这个Tensor是没有名字的,因此将静态图Tensor直接转化为numpy.ndarray保存。 此处动态图Tensor和静态图Tensor是不相同的,动态图Tensor有name、stop_gradient等属性;而静态图的Tensor是比动态图Tensor轻量级的,只包含place等基本信息,不包含名字等。
0
收藏
请登录后评论
对于state_dict保存方式与paddle2.0完全相同,我们将Tensor转化为numpy.ndarray保存。
对于其他形式的包含Tensor的对象(Layer对象,单个Tensor以及包含Tensor的嵌套list、tuple、dict),在动态图中,将Tensor转化为tuple(Tensor.name, Tensor.numpy());在静态图中,将Tensor直接转化为numpy.ndarray。之所以这样做,是因为当在静态图中使用动态保存的模型时,有时需要Tensor的名字因此将名字保存下来,同时,在load时区分这个numpy.ndarray是由Tenosr转化而来还是本来就是numpy.ndarray;保存静态图的Tensor时,通常通过Variable.get_value得到Tensor再使用paddle.save保存Tensor,此时,Variable是有名字的,这个Tensor是没有名字的,因此将静态图Tensor直接转化为numpy.ndarray保存。
此处动态图Tensor和静态图Tensor是不相同的,动态图Tensor有name、stop_gradient等属性;而静态图的Tensor是比动态图Tensor轻量级的,只包含place等基本信息,不包含名字等。