tensorflow之tf.record實現存浮點數陣列
阿新 • • 發佈:2020-02-17
因為最近打算轉戰Tensorflow,我將自己的腦部腫瘤分割課題從caffe轉移到tensorflow上去
然後我將資料存到Tf.record裡面去,出現來不收斂,以及精度上不去的等現象。
最終原因是:資料 存入tf.record,我轉為二進位制也就是使用來tobytes()函式,再將資料存入tf.record,浮點數以二進位制存入會有精度丟失問題。
其實:當發現這個精度上不去的現象之後,我第一反應就是是不是精度丟失,然後上網跟別人交流,告訴我不可能是精度丟失,不信讓我輸出來看,結果我輸出來看後,發現數值確實沒有變化,所以就放棄來這個精度丟失的方向,轉而去找別的方向,結果幾經周折,無果之後,再來嘗試這個,發現,確實是轉為二進位制導致來精度丟失(確實浪費來我很多精力,甚至一度想放棄)。
經驗教訓:跟別人交流,一定要保持理性,可以嘗試別人的方法,但是不能丟掉自己的想法,因為沒有人比你自己更瞭解你的專案。
下面來講講,如何將浮點陣列存進tf.record:簡單記錄,不懂可以評論:
import tensorflow as tf import numpy as np def _floats_feature(value): #這裡的value=後面沒有括號 #千萬不要寫成return tf.train.Feature(float_list=tf.train.FloatList(value=[value])) return tf.train.Feature(float_list=tf.train.FloatList(value=value)) # data you would like to save,dtype=float32 #這裡我生成了一個浮點數陣列,來假定作為我的資料 data = np.random.randn(shape=(5,5)) #這裡一定要鋪平,不然存不進去 data = data.flatten() # open tfrecord file writer = tf.python_io.TFRecordWriter(train_data_path) # make train example example = tf.train.Example(features=tf.train.Features( feature={'data': _floats_feature(data)})) # write on the file writer.write(example.SerializeToString())
這就是存資料了,下一步讀取資料,一定要注意將原來鋪平的資料reshape為原來的形狀。
# open tfrecorder reader reader = tf.TFRecordReader() # read file _,serialized_example = reader.read(filename_queue) # read data features = tf.parse_single_example(serialized_example,features={'data': tf.VarLenFeature(tf.float32)}) # make it dense tensor data = tf.sparse_tensor_to_dense(features['data'],default_value=0) # reshape data = tf.reshape(data,[5,5]) return tf.train.batch(data,batch_size,num_threads,capacity)
以上這篇tensorflow之tf.record實現存浮點數陣列就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。