问题描述
我正在尝试建立一个管道来训练模型。首先,我使用“训练轮”。 我将所有数据预处理为 5 个 EagerTensors——3 个用于特征,2 个用于目标。
为了便于论证,我们称特征张量“in_a,in_b,in_c”和目标张量“tgt_1,tgt_2”
输入张量的形状如下:
in_a.shape (67473,132,5)
in_b.shape (67473,132)
in_c.shape (67473,132)
目标张量是:
tgt_1.shape (67473,132)
tgt_2.shape (67473,132)
如果我使用 .fit 方法按以下方式将这些张量输入到我的模型中:
training_model.fit(x=[in_a,in_c],y=[tgt_1,tgt_2],batch_size = 32,shuffle = True,epochs = 20)
我在运行拟合时 100% 得到了很好的结果(输入数据在所有情况下都相同)
然而,我的数据量超出了内存的容量,所以我很想弄清楚 tf.data.Dataset 流,这就是我遇到问题的地方。
我采用完全相同的张量并按以下方式创建压缩数据集:
feature_ds = tf.data.Dataset.from_tensor_slices((a_in,b_in,c_in))
target_ds = tf.data.Dataset.from_tensor_slices((tgt_1,tgt_2))
full_dataset = tf.data.Dataset.zip((feature_ds,target_ds)).shuffle(buffer_size=320).batch(32).prefetch(tf.data.experimental.AUTOTUNE)
这会产生以下 element_spec:
((TensorSpec(shape=(None,5),dtype=tf.float64,name=None),TensorSpec(shape=(None,132),dtype=tf.float32,name=None)),(TensorSpec(shape=(None,name=None)))
现在,当我将数据集输入到完全相同的模型中时,每次训练模型时我都会得到完全不同的结果。
training_model.fit(full_dataset,epochs = 20)
20 个 epoch 的一次拟合结果很好;再跑一次,平庸;另一个,太糟糕了。
我可能做错了什么?任何想法如何解决这个问题?我的意思是,数据源不会在提供模型的两种方式之间发生变化,而只是用于获取模型的方法。
非常感谢! 珊瑚礁
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)