如何用 tensorflow 2.0 ver 一个一个地输入数据来训练
How can I feed data one by one to train with tensorflow 2.0 ver
我在使用注意力方法的自动编码器类型模型上工作。大约 10000 批数据被输入模型,每批包含 30 张图像(30 是 ConvLSTM 中的 "step_size"),形状为 (5, 5, 3 [R,G,B])。
因此,数组的形状为(10000, 30, 5, 5, 3)
(batch_size、step_size、image_height、image_width、scale)。
我特意将输出数组形状设为 (1,5,5,3)
,因为每个图像都必须独立处理才能应用注意力方法。
当我link所有与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 = 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)
它可以用 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()))
我在使用注意力方法的自动编码器类型模型上工作。大约 10000 批数据被输入模型,每批包含 30 张图像(30 是 ConvLSTM 中的 "step_size"),形状为 (5, 5, 3 [R,G,B])。
因此,数组的形状为(10000, 30, 5, 5, 3)
(batch_size、step_size、image_height、image_width、scale)。
我特意将输出数组形状设为 (1,5,5,3)
,因为每个图像都必须独立处理才能应用注意力方法。
当我link所有与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 = 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)
它可以用 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()))