2016-12-30 8 views
5

Próbuję zapisać plik csv (wszystkie kolumny są pływające) do pliku tfrecords, a następnie odczytać je z powrotem. Wszystkie przykłady, które widziałem, spakowuję kolumny csv, a następnie przekazuję je bezpośrednio do sess.run(), ale nie wiem, jak napisać kolumnę cech i kolumnę etykiety do tfrecordu. Jak mogłem to zrobić?Tensorflow utworzyć plik tfrecords z csv

+1

Czy mój post odpowiada na twoje pytanie? – standy

+0

Tak, przepraszam, zajęło mi to tyle czasu, że ostatnio byłem bardzo zajęty. Dzięki za pomoc! – Nitro

Odpowiedz

13

Będziesz potrzebować osobnego skryptu do konwersji pliku CSV na TFRecords.

Wyobraź sobie, że masz CSV z następującym nagłówkiem:

feature_1, feature_2, ..., feature_n, label 

Trzeba czytać CSV z czymś pandas, skonstruować tf.train.Example ręcznie, a następnie zapisać go do pliku z TFRecordWriter

csv = pandas.read_csv("your.csv").values 
with tf.python_io.TFRecordWriter("csv.tfrecords") as writer: 
    for row in csv: 
     features, label = row[:-1], row[-1] 
     example = tf.train.Example() 
     example.features.feature["features"].float_list.value.extend(features) 
     example.features.feature["label"].int64_list.value.append(label) 
     writer.write(example.SerializeToString()) 
-1
def convert_to(): 
filename = os.path.join(wdir, 'ml-100k' + '.tfrecords') 
print('Writing', filename) 
with tf.python_io.TFRecordWriter(filename) as writer: 
    with open("/Users/shishir/Documents/botconnect_Playground/tfRecords/ml-100k.train.rating", "r") as f: 
     line = f.readline() 
     while line != None and line != "": 
      arr = line.split("\t") 
      u, i, l = int(arr[0]), int(arr[1]), int(arr[2]) 
      u_arr = np.reshape(u,[1]).astype('int64') 
      i_arr = np.reshape(i,[1]).astype('int64') 
      l_arr = np.reshape(l,[1]).astype('int64') 
      example = tf.train.Example() 
      example.features.feature["user"].int64_list.value.extend(u_arr) 
      example.features.feature["item"].int64_list.value.extend(i_arr) 
      example.features.feature["label"].int64_list.value.append(int(l_arr)) 
      writer.write(example.SerializeToString()) 
      line = f.readline() 

To jest moje rozwiązanie i działa! Mam nadzieję, że to pomaga

Pozdrawiam.

+0

Dziękujemy za ten fragment kodu, który może zapewnić krótkoterminową pomoc w ograniczonym zakresie. Właściwe wyjaśnienie znacznie poprawi (// meta.stackexchange.com/q/114762) jego długoterminową wartość, pokazując * dlaczego * jest to dobre rozwiązanie problemu i sprawiłoby, że byłby bardziej przydatny dla przyszłych czytelników z inne, podobne pytania. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienia, w tym założenia, które podjąłeś. –