python - 具有小数据集的浅层神经网络的训练速度
问题描述
我的数据包含 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 分钟
解决方案
NLP 模型花费这么多时间来训练并不罕见。为了加快学习过程,我唯一会更改您的模型的是将优化器更改为没有固定学习率的东西。那应该加快这个过程。我建议使用 adam,因为它是性能最快的优化器之一。
只需更换
model.compile(optimizer, loss=tf.losses.softmax_cross_entropy)
和
model.compile(optimizer='adam', loss=tf.losses.softmax_cross_entropy)
推荐阅读
- jwt - 保护 OAuth 服务器生成的令牌的方法
- azure - Azure 映射数据流:无法使用 Blob 存储数据集作为源
- jpa - Quarkus 依赖注入到 JPA 实体管理器的问题
- python - GCP:在本地创建 Client() 对象
- kubernetes - 对非管理员的选择性 kubernetes 命名空间的限制
- javascript - 替换 Google Sheet 中函数中的文本(使用脚本)
- c# - ASP.NET MVC 引导项目 - 如何通过单击按钮运行 .cs 文件?
- java - 连续语音监听触发“助手”
- c# - 当再次启动协程时,我怎样才能使它不会再次播放对话/s?
- c# - 未知类型的解释(字面意思是
),在 ModuleDefinition 中