Чтение CSV-файла с функциями и метками в одной строке в Tensorflow - PullRequest
0 голосов
/ 28 июня 2018

У меня есть файл .csv с около 5000 строк и 3757 столбцов. Первые 3751 столбец каждой строки являются элементами, а последние 6 столбцов являются метками. Каждая строка представляет собой набор пары признаков-меток.

Я хотел бы знать, есть ли встроенные функции или какие-либо быстрые способы, которыми я могу:

  1. Разобрать первые 3751 столбец как объекты (у этих столбцов нет заголовков)
  2. Анализируйте ЛЮБОЙ из последних 6 столбцов как метки, что означает, что я хотел бы вынуть любой из последних 6 столбцов в качестве метки для обучения.

В основном я хочу обучить модель DNN с функциями 3751 и 1 меткой, и я хотел бы, чтобы выходные данные функции синтаксического анализа передавались в следующую функцию для обучения:

train_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x": np.array(training_set.data)},
      y=np.array(training_set.target),
      num_epochs=None,
      shuffle=True) 

Я знаю, что некоторые функции, такие как "tf.contrib.learn.datasets.base.load_csv_without_header", могут делать подобные вещи, но это уже устарело.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018
train_features_interim = []
  train_labels_interim = []
  with open(train_file) as f:
      csvreader = csv.reader(f)
      for row in csvreader:
          train_features_interim.append(row)  

  train_features_interim = pd.DataFrame(train_features_interim)      
  a = len(train_features_interim.columns)-6
  train_labels_interim = train_features_interim.iloc[:, a:a+1]   #train one label first
  train_features_interim = train_features_interim.iloc[:, :a]
  train_features_numpy = np.asarray(train_features_interim, dtype=np.float32)
  train_labels_numpy = np.asarray(train_labels_interim, dtype=np.float32)

У меня это сейчас работает. Хотя это не очень чисто, но это работает. Я могу настроить часть «a: a + 1», чтобы решить, сколько (или какие) столбцов я хотел бы поместить в inot train_labels_interim.

0 голосов
/ 29 июня 2018

Вы можете просмотреть входные конвейеры tf.data.Dataset ( LINK ). Что вы в основном делаете, так это то, что вы можете прочитать CSV-файл, возможно, пакетно / shuffle / map, как-нибудь, и создать итератор для набора данных. Всякий раз, когда вы оцениваете iterator.get_next(), вы получаете количество строк из вашего CSV, которое равно размеру пакета. Что касается разделения функций и меток, то вы можете просто получить доступ к отдельным элементам пакета со стандартным синтаксисом Python, например, features = batch[:-6] и label = batch[-1] и скормите их для любой функции.

На сайте tenorflow есть подробное руководство по использованию этих входных конвейеров ( LINK ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...