gpt4 book ai didi

python - 在 TensorFlow 中再现 scikit-learn 的 MLPClassifier

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:23 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com