2017-03-14 4 views
3

をfloat16するには?現在、量子化と8ビット整数への変換のためのグラフの最適化があります。「クオンタイズ」Tensorflowグラフ

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"]()]] 
+0

あなたは[quantize_graph](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/quantization/quantize_graph.py)に見たことがありますか?それは少し時代遅れのだが、ピートウォーデンは良い[量子上のポスト](https://petewarden.com/2016/05/03/how-to-quantize-neural-networks-with-tensorflow/)を持っています。 –

+0

はい、私の知るところでは、そこにはfp16のための何もありません。 –

+0

だから、明確にするために、既存の 'quantize_graph'のようなもののFP16ではなく、FP8のために何が欲しいですか?もしそうなら、私はGitHubのチケットを機能要求と共に提出することをお勧めします。 –

答えて

0

私は私の解決策は間違いなく最良かつ最も単純ではないものではないと思いますが、nobodyとして何かを掲示:float16グラフにfloat32重みをロードしようと

で失敗します。

私は完全な精度でネットワークを訓練し、チェックポイントでそれらを保存したんでした何。次に、必要なすべての変数を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文でさらにフィルタリングすることができます。これがあなたの質問に答えることを願っています

関連する問題