微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的模型没有训练所有数据Tensorflow 2

如何解决为什么我的模型没有训练所有数据Tensorflow 2

在这里一个使用 tensorflow.keras.datasets.imdb 数据的代码,在拆分训练和验证数据后(第 45-50 行),所以我的训练数据和训练标签是 (15000,) 的 ndarray。 在训练我的模型时,我可以看到模型没有遍历整个数据集,并且我的准确率为 49.8%

我关注了这个视频:TensorFlow 2.0 Tutorial - Training the Model - Text Classification P3 并输入了相同的程序。 这是我训练模型时看到的:

enter image description here

代码

s1 = pd.Series([0.0,0.0,0.0001499887511247459,-7.499156348433101e-05,-3.699790962233055e-05,-1.899945851585629e-05,-8.999869502079515e-06,-4.999962500264377e-06,-1.999992000039351e-06,-9.999974999814318e-07,-9.999984999603102e-07,1.699983850190338e-05,-8.999878501628346e-06,-3.999972000122605e-06,0.0003669319382432873,-0.0001849488621671012,-9.198730581664589e-05,-4.499687272496313e-05,0.0009075453820856781,0.0004854184782060238,-0.000720221831477389,-0.000359805708801156,-0.0001799514136040646,-8.998785170075082e-05,-5.999640023402946e-05,-1.9999600008734e-05,-6.999954500263924e-06,-1.999995999958864e-06,-9.999994999391884e-07,0.001201278176363365,-0.0008013581550363867,-0.0002669288650428971,-8.89921242557729e-05,-2.899914452727788e-05,-9.99990000099588e-06,-2.999989500049026e-06,0.0005218638053935734,-0.0004638654873286288,-3.799851806232993e-05,-1.299982450270071e-05,-4.999977500118572e-06,0.0])

s2 = pd.Series([0.0,0.0])

s3 = pd.Series([0.0006613932897393013,0.0002659978876289742,0.000658737582405648,0.0005623339888467145,0.0008417590777197284,0.000542090011101782,0.0007813756301534222,0.0003713395103963933,0.0001847566192768637,0.0005892778635844672,-0.0001955367110279687,0.0004436264576506058,0.000302660947173135,0.0007556577955957223,0.0004099113835531532,0.0002143017625986564,1.052211101549051e-05,6.481751166152551e-05,6.615670911548045e-05,-2.169766854576383e-05,-1.302819997635433e-05,-7.303052044212008e-06,-0.1163297855507419,-0.06335289603465369,-0.03314811069814094,-0.01697505737063765,-0.008591697883893402,-0.004342398361182662,-0.002157940126839023,-0.001100682037128825,-0.0005507856703497119,-0.0002554269710891206,-0.0001277329565522002,-8.395111298446951e-05,-2.189884089509773e-05,-1.094960028496637e-05,-5.479844975342307e-06,-2.739933748392279e-06,-1.369969689294177e-06,-6.799856523827107e-07,-3.399929995978179e-07,-1.79996340600251e-07,-7.999838400850306e-08,-3.999919442393075e-08,-2.999939675042158e-08,-2.007979819879551e-05,-1.004005030070562e-05,-5.52007060169889e-06,-2.760046727695654e-06,9.150125677134498e-06,4.580031464668292e-06,2.2900078662783e-06,1.150001972312828e-06,5.700004873407606e-07,2.80000120302654e-07,1.50000032247295e-07,7.000000733862829e-08,3.000000181016647e-08,2.000000056662899e-08,1.00000003333145e-08,1.000000011126989e-08,0.0])

(注意:我没有 Nvidia GPU,我的 GPU 是 RADEON RX)

解决方法

我认为您的模型已经在 15,000 个示例上进行了训练,因为每个 epoch 的迭代次数是 15000 /batch_size ~ 30。根据日志,它显示每个 epoch 的迭代次数为 30/30,并且训练过程也完成了40个epoch。您获得低准确率的原因可能是因为 traindev 集之间的比率目前为 15000:10000 = 60:40。因此,最好将其拆分为 80:20 或 90:10 的比例,以便模型可以看到更多示例。

,

批量大小为 512 时,您的数据显示您正在训练 30 个批次,因此您正在训练 15,360 个样本。您的数据显示模型训练良好。在 30 个时期结束时,您的训练准确度为 100%,验证准确度为 100%。我假设你在你的测试集上运行了 model.evaluate,它给了你 49.8% 的准确率。由于您的模型非常准确,因此您的测试数据存在问题。对验证数据运行 model.evaluate,您应该会看到 100% 的准确率。

,

每个时期都是对您指定的训练集批次的迭代。在您的情况下,批次大小 = 512,因此模型在每个时期的训练次数超过 512(批次大小)* 30(批次),即大约 15000 个数据点,因此在这种情况下您的整个集合。

然而,无论上述情况如何,您的模型都是完全错误的。

这里:

x_val = train_labels[:10000]
x_train = train_labels[10000:]

y_val = train_labels[:10000]
y_train = train_labels[10000:]

您为 x 和 y 指定了相同的对象(标签),因此您的模型没有学习任何东西,至少没有学习特征!

.fit() 函数让您可以选择完全跳过上面的手动验证拆分并执行以下操作:

fitModel = model.fit(x_train,y_train,epochs=40,batch_size=512,validation_split=0.2,verbose=1)
validation_split 内的

fit() 将在训练期间处理验证,并在这种情况下按照指定使用 20% 的数据点,这是一个很好的起点。

然后您可以执行fitModel.evaluate(x_test,y_test)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。