我的数据包含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阵列以匹配我的标签形状, 我也有热编码标签
训练数据大约为6万行文本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进行培训的每个时间需要一个小时,而在Google协作实验室上,每个时间需要20-30分钟
答案 0 :(得分:0)
NLP模型花费如此多的时间进行训练并不罕见。我要更改模型以加快学习过程的唯一一件事就是将优化器更改为没有固定学习率的东西。这样可以加快流程。我建议使用adam,因为它是性能最佳的最快的优化器之一。
只需替换
model.compile(optimizer, loss=tf.losses.softmax_cross_entropy)
使用
model.compile(optimizer='adam', loss=tf.losses.softmax_cross_entropy)