gpt4 book ai didi

tensorflow - "Quantize"Tensorflow 图到 float16

转载 作者:行者123 更新时间:2023-12-04 04:02:45 30 4
gpt4 key购买 nike

如何使用 float32 转换 Tensorflow 图至 float16 ?目前有用于量化和转换为八位整数的图形优化。

正在尝试加载 float32权重变成 float16图失败:

DataLossError (see above for traceback): Invalid size in bundle entry: key model/conv5_1/biases; stored size 1536; expected size 768
[[Node: save/RestoreV2_16 = RestoreV2[dtypes=[DT_HALF], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/RestoreV2_16/tensor_names, save/RestoreV2_16/shape_and_slices)]]
[[Node: save/RestoreV2_3/_39 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_107_save/RestoreV2_3", tensor_type=DT_HALF, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

最佳答案

我认为我的解决方案绝对不是最好的,也不是最直接的,但因为没有其他人发布任何内容:

我所做的是完全精确地训练网络并将它们保存在检查点中。然后我构建了一个网络副本,将所有需要的变量设置为 tf.float16 的 dtype 并删除所有训练节点。最后,我按以下方式加载和转换变量:

previous_variables = [
var_name for var_name, _
in tf.contrib.framework.list_variables('path-to-checkpoint-file')]
#print(previous_variables)
sess.run(tf.global_variables_initializer())
restore_map = {}
for variable in tf.global_variables():
if variable.op.name in previous_variables:
var = tf.contrib.framework.load_variable(
'path-to-checkpoint-file', variable.op.name)
if(var.dtype == np.float32):
tf.add_to_collection('assignOps', variable.assign(
tf.cast(var, tf.float16)))
else:
tf.add_to_collection('assignOps', variable.assign(var))
sess.run(tf.get_collection('assignOps'))

如果有您不想转换的 float32 张量,这显然会有问题,幸运的是我没有,因为我想将所有节点转换为 float16 精度。如果您有这些,您可以使用其他 if 语句进一步过滤。我希望这回答了你的问题。

关于tensorflow - "Quantize"Tensorflow 图到 float16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42793027/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com