2017-12-18 9 views
1

numpy配列からtfrecord形式のデータセットを作成しようとしています。私は2Dと3Dの座標を格納しようとしています。numpy配列をtfrecordとして保存する方法は?

2D座標タイプのfloat64 3D座標の形状のnumpyのアレイ(2,10)が、これは私のコードであるのfloat64

タイプの形状のnumpyのアレイ(3,10)されている。

def _floats_feature(value): 
    return tf.train.Feature(float_list=tf.train.FloatList(value=value)) 


train_filename = 'train.tfrecords' # address to save the TFRecords file 
writer = tf.python_io.TFRecordWriter(train_filename) 


for c in range(0,1000): 

    #get 2d and 3d coordinates and save in c2d and c3d 

    feature = {'train/coord2d': _floats_feature(c2d), 
        'train/coord3d': _floats_feature(c3d)} 
    sample = tf.train.Example(features=tf.train.Features(feature=feature)) 
    writer.write(sample.SerializeToString()) 

writer.close() 

私はこれを実行すると、私はエラーを取得:

feature = {'train/coord2d': _floats_feature(c2d), 
    File "genData.py", line 19, in _floats_feature 
return tf.train.Feature(float_list=tf.train.FloatList(value=value)) 
    File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\google\protobuf\internal\python_message.py", line 510, in init 
copy.extend(field_value) 
    File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\google\protobuf\internal\containers.py", line 275, in extend 
new_values = [self._type_checker.CheckValue(elem) for elem in elem_seq_iter] 
    File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\google\protobuf\internal\containers.py", line 275, in <listcomp> 
new_values = [self._type_checker.CheckValue(elem) for elem in elem_seq_iter] 
    File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\google\protobuf\internal\type_checkers.py", line 109, in CheckValue 
raise TypeError(message) 
TypeError: array([-163.685, 240.818, -114.05 , -518.554, 107.968, 427.184, 
    157.418, -161.798, 87.102, 406.318]) has type <class 'numpy.ndarray'>, but expected one of: ((<class 'numbers.Real'>,),) 

私はこの問題を解決する方法を知りません。私はint64またはバイトとして機能を格納する必要がありますか?私はテンソルフローが全く新しいので、これについてどうやって行くのか分かりません。どんな助けも素晴らしいだろう!おかげ

答えて

1

tf.train.Featureクラスのみリスト(又は1-Dアレイfloat_list引数を使用してサポート。あなたのデータに応じて、次のいずれかの方法を試してみてください:

  1. tf.train.Featureに渡す前に、あなたの配列内のデータをフラット化:あなたが別の機能を追加する必要があるかもしれません

    def _floats_feature(value): 
        return tf.train.Feature(float_list=tf.train.FloatList(value=value.reshape(-1))) 
    

    注意をもう一度解析するときにこのデータをどのように再構成するかを示します(その目的でint64_list機能を使用できます)。

  2. 多次元フィーチャを複数の1次元フィーチャに分割します。たとえば、c2dN * 2のx座標とy座標の配列が含まれている場合は、その機能をそれぞれx座標とy座標のデータを含む別のtrain/coord2d/xフィーチャーとtrain/coord2d/yフィーチャーに分割できます。

関連する問題