- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Tensorflow 的新手,之前广泛使用过 scikit-learn。作为我尝试过渡到 TensorFlow 的第一个练习之一,我尝试重现我使用 scikit-learn 的 MLPClassifier 获得的一些结果。
当我使用大部分默认设置的 MLPClassifier 时,我在测试集上的准确率高达 98%。然而,当我在 TensorFlow 中实现我认为是等效的单层 ANN 时,我在测试集上的准确率低于 90%。我能让 TensorFlow 产生类似精度的唯一方法是对训练集进行多次 (> 50) 次训练。
知道差异可能来自哪里吗?或者在 Tensorflow 中是否有任何 sklearn MLPClassifier 的实现可以与我的代码进行比较?
就我而言,我在输出层使用相同的优化器 (Adam)、相同的学习率、具有相同参数的 L2 正则化、相同的激活函数 (ReLU) 和 softmax 评估。
我对 TensorFlow 图的实现如下:
n_units = 500
X = tf.placeholder(tf.float32, [None, n_features])
Y = tf.placeholder(tf.float32, [None, n_classes])
# Create weights for all layers
W_input = tf.Variable(tf.truncated_normal([n_features, n_units]))
W_out = tf.Variable(tf.truncated_normal([n_units, n_classes]))
# Create biases for all layers
b_1 = tf.Variable(tf.zeros([n_units]))
b_2 = tf.Variable(tf.zeros(([n_classes])))
# Mount layers
hidden_layer = tf.nn.relu(tf.matmul(X, W_input) + b_1)
logits = tf.matmul(hidden_layer, W_out) + b_2
# Get all weights into a single list
all_weights = tf.concat([tf.reshape(W_input, [-1]), tf.reshape(W_out, [-1])], 0)
# Compute loss function
cross_entropy = tf.reduce_mean(
tf.losses.softmax_cross_entropy(onehot_labels=Y, logits=logits))
# Compute regularization parameter
regularizer = 0.0001*tf.nn.l2_loss(all_weights)
# Train step
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy + regularizer)
# Get number of correct predictions
correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(Y, 1))
# Class prediction
prediction = tf.argmax(tf.nn.softmax(logits), 1)
# Get accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
我对 sklearn 模型的实现很简单:
clf = neural_network.MLPClassifier(hidden_layer_sizes = (500,), random_state=42)
最佳答案
MLP 分类器是一种神经网络。本质上,它需要经过多次迭代(epoch)训练,然后才能使用反向传播在隐藏层上学习适当的权重,然后才能正确分类。
如果您查看 sklearns 实现,有一个名为 max_iter
的默认参数
max_iter : int, optional, default 200
Maximum number of iterations. The solver iterates until convergence (determined by ‘tol’) or this number of iterations. For stochastic solvers (‘sgd’, ‘adam’), note that this determines the number of epochs (how many times each data point will be used), not the number of gradient steps.
基本上,它会运行 200 个纪元,然后才能提供 0.98 的准确度。这就是为什么您需要在 tensorflow 中运行相同的图形 200 次(我假设您所说的 50 次也足够)以获得完全相同的输出。
关于python - 在 TensorFlow 中再现 scikit-learn 的 MLPClassifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47113596/
来自文档: sklearn.preprocessing.MinMaxScaler.min_ : ndarray, shape (n_features,) Per feature adjustment
这是我的数据:(我重置了索引。日期应该是索引) Date A B C D 0 2013-10-07 -0.002
我正在构建一个分类器,通过贷款俱乐部数据,选择最好的 X 笔贷款。我训练了一个随机森林,并创建了通常的 ROC 曲线、混淆矩阵等。 混淆矩阵将分类器的预测(森林中树木的多数预测)作为参数。但是,我希望
是否有类似于 的 scikit-learn 方法/类元成本 在 Weka 或其他实用程序中实现的算法以执行常量敏感分析? 最佳答案 不,没有。部分分类器提供 class_weight和 sample_
我发现使用相同数据的两种交叉验证技术之间的分类性能存在差异。我想知道是否有人可以阐明这一点。 方法一:cross_validation.train_test_split 方法 2:分层折叠。 具有相同
我正在查看 scikit-learn 文档中的这个示例:http://scikit-learn.org/0.18/auto_examples/model_selection/plot_nested_c
我想训练一个具有很多标称属性的数据集。我从一些帖子中注意到,要转换标称属性必须将它们转换为重复的二进制特征。另外据我所知,这样做在概念上会使数据集稀疏。我也知道 scikit-learn 使用稀疏矩阵
我正在尝试在 scikit-learn (sklearn.feature_selection.SelectKBest) 中通过卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到此警告: 用户
有几种算法可以构建决策树,例如 CART(分类和回归树)、ID3(迭代二分法 3)等 scikit-learn 默认使用哪种决策树算法? 当我查看一些决策树 python 脚本时,它神奇地生成了带有
我正在尝试在 scikit-learn (sklearn.feature_selection.SelectKBest) 中通过卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到此警告: 用户
有几种算法可以构建决策树,例如 CART(分类和回归树)、ID3(迭代二分法 3)等 scikit-learn 默认使用哪种决策树算法? 当我查看一些决策树 python 脚本时,它神奇地生成了带有
有没有办法让 scikit-learn 中的 fit 方法有一个进度条? 是否可以包含自定义的类似 Pyprind 的内容? ? 最佳答案 如果您使用 verbose=1 初始化模型调用前 fit你应
我正在尝试使用 grisSearchCV 在 scikit-learn 中拟合一些模型,并且我想使用“一个标准错误”规则来选择最佳模型,即从分数在 1 以内的模型子集中选择最简约的模型最好成绩的标准误
我有一个预定义的决策树,它是根据基于知识的拆分构建的,我想用它来进行预测。我可以尝试从头开始实现决策树分类器,但那样我就无法在 Scikit 函数中使用 predict 等内置函数。有没有办法将我的树
我正在使用随机森林解决分类问题。为此,我决定使用 Python 库 scikit-learn。但我对随机森林算法和这个工具都很陌生。我的数据包含许多因子变量。我用谷歌搜索,发现像我们在线性回归中所做的
我使用 Keras 回归器对数据进行回归拟合。我使用 Scikit-learn wrapper 和 Pipeline 来首先标准化数据,然后将其拟合到 Keras 回归器上。有点像这样: from s
在 scikit-learn ,有一个 的概念评分函数 .如果我们有一些预测标签和真实标签,我们可以通过调用 scoring(y_true, y_predict) 来获得分数。 .这种评分函数的一个例
我知道 train_test_split 方法将数据集拆分为随机训练和测试子集。并且使用 random_state=int 可以确保每次调用该方法时我们对该数据集都有相同的拆分。 我的问题略有不同。
我正在使用 scikit-learn 0.18.dev0。我知道之前有人问过完全相同的问题 here .我尝试了那里提供的答案,但出现以下错误 >>> def mydist(x, y): ...
我试图在 scikit-learn 中结合递归特征消除和网格搜索。正如您从下面的代码(有效)中看到的那样,我能够从网格搜索中获得最佳估计量,然后将该估计量传递给 RFECV。但是,我宁愿先进行 RFE
我是一名优秀的程序员,十分优秀!