Отображение предсказания модели Keras для набора данных tf таким образом, чтобы порядок сохранялся - PullRequest
0 голосов
/ 26 февраля 2019

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

(data features, data label, file_name, some other attributes)

Я использую стандартную модель VG19 с предварительной подготовкой из Кераса и яхотел бы получить из этого набор данных следующим образом:

(data features, transformed data features, data label, file name, some other attributes)

Я не хочу терять связь с другими файлами.

ЗдесьВот пример кода, который я запускаю, который не работает и может проиллюстрировать мою точку зрения:

import tensorflow as tf

# Create a dataset with tuples like the following: (x, 2*x, 3*x)
datasetx = tf.data.Dataset.range(100)
datasety = tf.data.Dataset.range(100).map(lambda x: x*2)
datasetz = tf.data.Dataset.range(100).map(lambda x: x*3)
dataset = tf.data.Dataset.zip((datasetx, datasety, datasetz)).shuffle(10)

# Create a simple (dumb) model
model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(10, activation=tf.nn.relu),
  tf.keras.layers.Dense(1, activation=None)
])

model.compile(optimizer='adam',
              loss='mse',
              metrics=['accuracy'])

# Train the model
model.fit(dataset.map(lambda x, y, z: (tf.reshape(x, [1,1]), y)),
          steps_per_epoch=1)

# Map the prediction over the dataset
predicted_tuples = dataset.map(lambda x, y, z: (model.predict(x, steps=1), y, z))
iterator = predicted_tuples.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:
  print(list(sess.run(next_element) for i in range(100)))

В данный момент это не работает.

Я бы тоже согласился с чем-то вроде этого,но порядок в этом случае не поддерживается:

import tensorflow as tf

# Create a dataset with tuples like the following: (x, 2*x, 3*x)
datasetx = tf.data.Dataset.range(100)
datasety = tf.data.Dataset.range(100).map(lambda x: x*2)
datasetz = tf.data.Dataset.range(100).map(lambda x: x*3)
dataset = tf.data.Dataset.zip((datasetx, datasety, datasetz)).shuffle(10)

# Create a simple (dumb) model
model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(10, activation=tf.nn.relu),
  tf.keras.layers.Dense(1, activation=None)
])

model.compile(optimizer='adam',
              loss='mse',
              metrics=['accuracy'])

# Train the model
model.fit(dataset.map(lambda x, y, z: (tf.reshape(x, [1,1]), y)),
          steps_per_epoch=1)

# Map the prediction over the dataset
X = model.predict(dataset.map(lambda x, y, z: tf.reshape(x, [1,1])), steps=100)
Y = dataset.map(lambda x, y, z: y)
Z = dataset.map(lambda x, y, z: z)

it_Y = Y.make_one_shot_iterator().get_next()
it_Z = Z.make_one_shot_iterator().get_next()
with tf.Session() as sess:
  print(zip(X, list(sess.run(it_Y, it_Z) for i in range(100))))

Мне нужно что-то вроде этого, но не что-то точно так, пока данные кортежа могут поддерживаться и гарантироваться.Мне также нужно, чтобы он работал быстро и распараллеливался.Кто-нибудь знает, что мне нужно?

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