我正在尝试使用一些简单的数据来测试TensorFlow的tf.estimator.DNNClassifier
X = [[1,2], [1,12], [1,17], [9,33], [48,49], [48,50]]Y = [ 1, 1, 1, 1, 2, 3 ]
分类器接受两个输入:x1,x2;其结构如下:
#这4层应该能够进行4次线性分离hidden_units = [2000,1000,500,100]n_classes = 4
然而,事情并未如愿,网络无法拟合。准确率很快达到8.33(=5/6)但随后就卡住了。损失函数收敛到一条水平线,但不是零线。
上述数据是可以进行两次线性分离的(右键点击图片在新标签页中打开):
即使网络运行到10,000步,它仍然卡住,我猜是因为它无法分离Y=2和Y=3这两个值,是这样吗?如何使网络适应上述数据呢?
回答:
我尝试了以下方法,并且有效:
- 使用leaky relu或sigmoid
- 减少层数
- 减少每层的neurons数量
- 标准化输入
- 增加步数和epochs(如果需要)