Пользовательская функция ввода для оценщика вместо tf.data.dataset - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу знать, создал ли кто-нибудь свою собственную функцию ввода для оценки тензорного потока? как в ( ссылка ) это изображение: enter image description here

где говорят, что рекомендуется использовать tf.data.dataset. Но я не хочу использовать этот, так как я хочу написать свой собственный итератор, который выдает данные в пакетном режиме и также перемешивает их.

    def data_in(train_data):
      data = next(train_data)
      ff = list(data)
      tf.enable_eager_execution()
      imgs = tf.stack([tf.convert_to_tensor(np.reshape(f[0], [img_size[0], img_size[1], img_size[2]])) for f
                                        in ff])
      lbls = tf.stack([f[1] for f in ff])
      print('TRAIN data: %s %s ' % (imgs.get_shape(), lbls.get_shape()))
      return imgs, lbls

вывод: TRAIN data: (10, 32, 32, 3) (10,)

где train_data - это объект-генератор, который проходит через мой набор данных, используя iter и np.reshape (f [0], [img_size [0], img_size 2 , img_size 2 ] в основном изменяет данные, которые я извлекаю, до требуемых размеров, и это пакет всего набора данных. Я использую стек для преобразования списка тензоров, чтобы преобразовать их в сложенные тензоры. Но когда я использую это с оценками, я получаю ошибка для функций, предоставляемых модели, из-за которых функции не имеют get_shape (). Когда я тестирую его без оценщика, он работает хорошо, а get_shape () также работает хорошо.

1 Ответ

0 голосов
/ 14 ноября 2018

Эй, квиш, я понял, как это сделать. Мне просто нужно было добавить эти строки

experiment = tf.contrib.learn.Experiment(
cifar_classifier,
train_input_fn=lambda: data_in(),
eval_input_fn=lambda: data_in_eval(),
train_steps=train_steps)

Я знаю, что эксперимент устарел, я тоже сделаю это с оценщиком :)

...