Как я могу подавать данные один за другим, чтобы тренироваться с tenorflow 2.0 ver - PullRequest
0 голосов
/ 03 февраля 2020

Я работаю над моделью с автоэнкодером, используя метод внимания. Около 10000 пакетов данных поступают в модель, и каждый пакет содержит 30 изображений (30 - это «step_size» в ConvLSTM) с формой (5, 5, 3 [R, G, B]).

Следовательно, массив имеет форму (10000, 30, 5, 5, 3) (batch_size, step_size, image_height, image_width, scale).

Я намеренно сделал форму выходного массива как (1,5,5,3), потому что каждое изображение должно обрабатываться независимо, чтобы применить метод внимания.

Когда я связываю все операции с tf.keras.Model, так что его вход имеет форму (10000,30,5,5,3) и форму вывода (1,5,5,3).

history = model.fit(train_data, train_data, batch_size = 1, epochs = 3)

Я пытаюсь изменить аргументы в модуле Model, но кажется, что он не работает, потому что форма вывода не совпадает с формой ввода.

Есть ли какие-либо возможные способы подачи данных по одному?

Я в итоге запускаю код, похожий на:


model = keras.Model(intput, output)

model.compile(optimizer='adam',loss= tf.keras.losses.MSE)

history = model.fit(train_data, train_data, batch_size = 1, epochs = 3)

1 Ответ

0 голосов
/ 07 февраля 2020

Это можно было бы сделать с GradientTape, кормя по одному.

def train(loss, model, opt, x_inp):
  with tf.GradientTape() as tape:
    gradients = tape.gradient(loss(model, x_inp), model.trainable_variables)
    gradient_variables = zip(gradients, model.trainable_variables)
    opt.apply_gradients(gradient_variables)


opt = tf.optimizers.Adam(learning_rate=learning_rate)

import datetime
current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")

train_summary_writer = tf.summary.create_file_writer(train_log_dir)

epochs = 3

with train_summary_writer.as_default():
  with tf.summary.record_if(True):
    for epoch in range(epochs):
      for train_id in range(0, len(batch_data)):
          x_inp = np.reshape(np.asarray(batch_data), [-1, step_max, sensor_n, sensor_n, scale_n])
          train(loss, model, opt, x_inp)
          loss_values = loss(model, x_inp)
          reconstructed = np.reshape(model(x_inp), [1, sensor_n, sensor_n, scale_n])
      print("loss : {}".format(loss_values.numpy()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...