У меня есть набор данных с тензорным потоком, так что каждая итерация набора данных возвращает кортеж следующей формы:
(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))))
Мне нужно что-то вроде этого, но не что-то точно так, пока данные кортежа могут поддерживаться и гарантироваться.Мне также нужно, чтобы он работал быстро и распараллеливался.Кто-нибудь знает, что мне нужно?