Neural network TensorFlow中的神经网络比随机森林的效果差,每次都预测相同的标签

Neural network TensorFlow中的神经网络比随机森林的效果差,每次都预测相同的标签,neural-network,tensorflow,classification,keras,Neural Network,Tensorflow,Classification,Keras,我是DNN和TesorFlow的新手。 我有一个问题,NN用于二进制分类 作为输入数据,我有文本数据集,它被TF-IDF转换成数字向量 培训数据集的行数为43000 功能的数量为4235 我尝试使用TFlearn library,然后使用Keras io。但结果是相同的-神经网络只预测一个标签0或1,给出的精度比随机森林差 我将添加用于NN构建的脚本。请告诉我有什么问题 model = Sequential() model.add(Dense(100, input_dim=4235, init

我是DNN和TesorFlow的新手。 我有一个问题,NN用于二进制分类

作为输入数据,我有文本数据集,它被TF-IDF转换成数字向量

培训数据集的行数为43000 功能的数量为4235

我尝试使用TFlearn library,然后使用Keras io。但结果是相同的-神经网络只预测一个标签0或1,给出的精度比随机森林差

我将添加用于NN构建的脚本。请告诉我有什么问题

model = Sequential()

model.add(Dense(100, input_dim=4235, init='uniform', activation='relu'))
model.add(Dense(4235, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_train, y_train, nb_epoch=100, batch_size=10,  verbose=2)

你提供的信息有很多可能的原因,还有很多你可以尝试改进的地方,但从高层次来看,这是我经历中最重要的事情。如果您已经检查了大部分内容,我很抱歉:

数据量 当没有足够的数据时,深度学习实际上可能比“经典”ML(如树、svm)表现最差。多少是足够的取决于任务,但作为一个松散的经验法则,您可能希望有一个数量级与数据量相同的模型参数。在您发布的模型中,您有100 x 4235+100 x 4235+4235*1=851235个参数

正规化 从您发布的代码来看,您似乎没有使用任何正则化(例如辍学或L2),也没有使用验证集来测量训练集中模型的质量。您的模型可能过度适合训练集

建筑学 对于文本建模,通常使用RNN(如LSTM或GRU)或CNN,而不是密集/完全连接的层。RNN和CNN包含对密集层中不存在的模型序列的架构约束。换句话说,密集层缺乏关于数据类型的先验知识,因此它们可能需要更多的数据/训练时间才能达到类似的性能。Keras回购协议中有很多这样的例子:

其中一个例子是使用LSTM的IMDB文本(二进制)分类:

文本特征化
深度学习中另一个非常常见的工具是将文本编码为一系列单词向量(有时是一个热门字符)。这些可以用s随机向量初始化,也可以用预先训练的向量(例如手套和word2vec)初始化。上面的示例使用前一种方法。

仅凭您提供的信息,就有许多可能的原因,还有许多您可以尝试改进的地方,但从较高的层次来看,以下是我经验中最重要的项目。如果您已经检查了大部分内容,我很抱歉:

数据量 当没有足够的数据时,深度学习实际上可能比“经典”ML(如树、svm)表现最差。多少是足够的取决于任务,但作为一个松散的经验法则,您可能希望有一个数量级与数据量相同的模型参数。在您发布的模型中,您有100 x 4235+100 x 4235+4235*1=851235个参数

正规化 从您发布的代码来看,您似乎没有使用任何正则化(例如辍学或L2),也没有使用验证集来测量训练集中模型的质量。您的模型可能过度适合训练集

建筑学 对于文本建模,通常使用RNN(如LSTM或GRU)或CNN,而不是密集/完全连接的层。RNN和CNN包含对密集层中不存在的模型序列的架构约束。换句话说,密集层缺乏关于数据类型的先验知识,因此它们可能需要更多的数据/训练时间才能达到类似的性能。Keras回购协议中有很多这样的例子:

其中一个例子是使用LSTM的IMDB文本(二进制)分类:

文本特征化
深度学习中另一个非常常见的工具是将文本编码为一系列单词向量(有时是一个热门字符)。这些可以用s随机向量初始化,也可以用预先训练的向量(例如手套和word2vec)初始化。上面的例子使用前一种方法。

谢谢@cortex。我将尝试使用您的所有建议。还有一件事:在将数据提供给NN之前,不要忘记对数据进行标准化/规范化!!谢谢你@cortex。我将尝试使用您的所有建议。还有一件事:在将数据提供给NN之前,不要忘记对数据进行标准化/规范化!!