keras - 如何一一提供数据以使用 tensorflow 2.0 版本进行训练
问题描述
我使用注意方法研究自动编码器类型模型。大约 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)
,因为必须独立处理每个图像才能应用注意力方法。
当我链接所有操作时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()))
推荐阅读
- c - 无法理解为什么基本算法在 N=2 时输出 0、4、12 和 10
- excel - VBA BeforeDoubleClick 类型不匹配
- sql - 自动递增 ID 已反转且未组织的问题
- json - 如何在颤动中将图像从模型显示到轮播(滑块)?
- django - 未找到带有参数 '('',)' 的 'staff_info_update' 的反向操作。尝试了 1 种模式:['admin/staff/info/edit/(?P
[0-9]+)/$'] - node.js - 使用 React 和 Node JS 以编程方式为网站和电子邮件创建子域
- typescript - io-ts 对象类型名称在 WebStorm 中丢失
- javascript - Modal 显示整个 json 数据而不是仅显示一个元素
- vb.net - 如何在 VB.net 中使用瑞士星历表
- javascript - 64位windows下运行jwacs(lisp程序)