Ответ 1
Предположим, что у вас есть функция, которая генерирует данные:
def generator(data):
...
yield (X, y)
Теперь вам нужна другая функция, описывающая вашу модельную архитектуру. Это может быть любая функция, которая обрабатывает X и должна предсказать y как результат (например, нейронную сеть).
Предположим, что ваша функция принимает X и y в качестве входов, каким-то образом вычисляет предсказание для y из X и возвращает функцию потерь (например, кросс-энтропия или MSE в случае регрессии) между y и предсказанным y:
def neural_network(X, y):
# computation of prediction for y using X
...
return loss(y, y_pred)
Чтобы ваша модель работала, вам нужно определить заполнители для X и Y, а затем запустить сеанс:
X = tf.placeholder(tf.float32, shape=(batch_size, x_dim))
y = tf.placeholder(tf.float32, shape=(batch_size, y_dim))
Заполнители - это что-то вроде "свободных переменных", которые нужно указать при запуске сеанса feed_dict
:
with tf.Session() as sess:
# variables need to be initialized before any sess.run() calls
tf.global_variables_initializer().run()
for X_batch, y_batch in generator(data):
feed_dict = {X: X_batch, y: y_batch}
_, loss_value, ... = sess.run([train_op, loss, ...], feed_dict)
# train_op here stands for optimization operation you have defined
# and loss for loss function (return value of neural_network function)
Надеюсь, вам понравится. Однако имейте в виду, что это не полностью работающая реализация, а скорее псевдокод, поскольку вы не указали почти никаких подробностей.