頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


TFRecordで多次元配列を扱う

TFRecordでたくさんの浮動小数点数を扱う
numpyで値の型を指定したつもりが
↑このあたりに関連したデータの整形のお話。

TensorFlowで多次元の配列でデータを受け取りたいとする。
まずは保存。上記リンクにあるようにnumpyを使う。3次元の場合はこんな感じでやってみた。値は32bitのfloatで。
{
    CH = 4
    W = 3
    H = 2
    ite = 0
    arr_h = np.zeros([0,W,CH] , dtype=np.float32)
    for h in range(H) :
        arr_w = np.zeros([0,CH] , dtype=np.float32)
        for w in range(W) :
            arr_ch = np.zeros([0] , dtype=np.float32)
            for ch in range(CH) :
                arr_ch = np.append(arr_ch , np.float32(ite)) 
                ite += 1
            arr_w = np.append(arr_w , [arr_ch] , axis=0)
        arr_h = np.append(arr_h , [arr_w] , axis=0)
    print(arr_h)
}
#[[[ 0. 1. 2. 3.]
# [ 4. 5. 6. 7.]
# [ 8. 9. 10. 11.]]
#
# [[ 12. 13. 14. 15.]
# [ 16. 17. 18. 19.]
# [ 20. 21. 22. 23.]]]

↑結果。意図通り2x3x4の3次元配列になってる。append時のキャストが必要なのはリンクの通り。
これをTFRecordに書き込んだとする。
次に、このデータを使う時に読み込む場合。
{
    features = tf.parse_single_example(
                                       serialized_example,
                                       features={
                                       'arr_h': tf.FixedLenFeature([], tf.string),
                                       })
    arr = tf.decode_raw(features['arr_h'], tf.float32)
    arr = tf.reshape(arr, tf.stack([2,3,4]))
}
reshapeが必要。画像サイズがまちまちだと画像ごとにW,H,CHの値を持たせてる場合もあったと思う(確かcifar10とか?)が定数なら持たせなくてもいいか。
TensorFlowのテンソルとして値を表示させてみると、、、

_arr1=[[[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]

[[ 12. 13. 14. 15.]
[ 16. 17. 18. 19.]
[ 20. 21. 22. 23.]]]]

ふんふん、それらしくなってるな。とまあここまでしか確認はできていなくて、これからこれらを使って実際に学習が進むかってのをやっていくわけだけど。
スポンサーサイト




<< SCNNodeオブジェクトをコピーしたい  TopPage  numpyで値の型を指定したつもりが >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1109-a712f136




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.