Numpy配列からtfrecord形式のデータセットを作成しようとしています。 2Dおよび3D座標を保存しようとしています。
2d座標はfloat64型の形状(2,10)のnumpy配列です3d座標はfloat64型の形状(3,10)のnumpy配列です
これは私のコードです:
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またはバイトとして保存する必要がありますか?私はテンソルフローに完全に慣れていないので、どうすればいいのかわかりません。どんな助けでも素晴らしいです!ありがとう
tf.train.Feature
引数を使用する場合、float_list
クラスはlists(または1-D配列)のみをサポートします。データに応じて、次のいずれかの方法を試すことができます。
tf.train.Feature
に渡す前に、配列内のデータをフラット化します。
def _floats_feature(value):
return tf.train.Feature(float_list=tf.train.FloatList(value=value.reshape(-1)))
もう一度解析するときにこのデータを再形成する方法を示すために、別の機能を追加する必要がある場合があります(そのためにint64_list
機能を使用できます)。
多次元フィーチャーを複数の1-Dフィーチャーに分割します。たとえば、c2d
にx座標とy座標のN * 2
配列が含まれている場合、その機能を個別のtrain/coord2d/x
およびtrain/coord2d/y
機能に分割し、それぞれにx-とおよびy座標データ。