首页 > 解决方案 > 具有小数据集的浅层神经网络的训练速度

问题描述

我的数据包含 1 个特征和每个特征的标签,即。["smallBigTest", "toastBob"]<- 特征 4 个标签["mix", "small", "big", "medium"]

我已将我的功能转换为基于字母的数字,即。

smallBigTest -> 18, 12,  0, 53, 53, 27,  8,  6, 45,  4, 18, 19
toastBob ->     19, 14,  0, 18, 19, 27, 14,  1, -1, -1, -1, -1

后来我热编码和重塑,所以最终的特征数组看起来像[[hotencoded(18,12,0,53,53,27,8,6,45,4,18,19)], [hotencoded(19,14,0,18,19,27,14,1,-1,-1,-1,-1)]

只需将其从 3d 数组变成 2d 数组以匹配我的标签形状,我也有热编码标签

训练数据约为 60k 行文本 1.2mb csv 文件

这是我的模型:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(16, activation=tf.nn.sigmoid))
model.add(tf.keras.layers.Dense(labelsDictSize, activation=tf.nn.softmax))

optimizer = tf.train.GradientDescentOptimizer(0.05)
model.compile(optimizer, loss=tf.losses.softmax_cross_entropy)
model.fit(featuresOneHot,labelsOneHot, steps_per_epoch=dataCount, epochs=5, verbose=1)

我是 ML 的新手,所以我可能会做一些完全错误或完全愚蠢的事情,但我认为这个数据量会很好。在我的机器上使用 gtx870m 训练每个 epoch 需要一个小时,而在 google collaboratory 上每个 epoch 大约需要 20-30 分钟

标签: pythontensorflowkerastraining-data

解决方案


NLP 模型花费这么多时间来训练并不罕见。为了加快学习过程,我唯一会更改您的模型的是将优化器更改为没有固定学习率的东西。那应该加快这个过程。我建议使用 adam,因为它是性能最快的优化器之一。

只需更换

model.compile(optimizer, loss=tf.losses.softmax_cross_entropy)

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

推荐阅读