Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的tensorflow神经网络精度不变_Python_Tensorflow_Machine Learning_Neural Network - Fatal编程技术网

Python 我的tensorflow神经网络精度不变

Python 我的tensorflow神经网络精度不变,python,tensorflow,machine-learning,neural-network,Python,Tensorflow,Machine Learning,Neural Network,我想为(录取、gre、gpa、排名)建立一个神经网络 我承认,排名第一热如下 one_hot_data = pd.concat([data, pd.get_dummies(data['rank'], prefix='rank')], axis=1) one_hot_data = pd.concat([one_hot_data, pd.get_dummies(data['admit'], prefix='admit')], axis=1) # Drop the p

我想为(录取、gre、gpa、排名)建立一个神经网络 我承认,排名第一热如下

    one_hot_data = pd.concat([data, pd.get_dummies(data['rank'], prefix='rank')], axis=1)
    one_hot_data = pd.concat([one_hot_data, pd.get_dummies(data['admit'], prefix='admit')], axis=1)
    
    # Drop the previous rank column
    data = one_hot_data.drop('rank', axis=1)
    data = one_hot_data.drop('admit', axis=1)
    print(data.shape)
我使用
train\u test\u split
分割数据,并使用
minmax\u scale
但神经网络是如下所示

n_features = X_train.shape[1]
n_labels = y_train.shape[1]

features = tf.placeholder(tf.float32, [None, n_features])
labels = tf.placeholder(tf.float32, [None, n_labels])

w = [
    tf.Variable(tf.random_normal((n_features, 16)), name='Weights_layer_0'),
    tf.Variable(tf.random_normal((16, 4)), name='Weights_layer_1'),
    tf.Variable(tf.random_normal((4, n_labels)), name='Weights_layer_2'),
]

n_layers = len(w)
b = [
    tf.Variable(tf.zeros(16), name='Bias_layer_0'),
    tf.Variable(tf.zeros(4), name='Bias_layer_1'),
    tf.Variable(tf.zeros(n_labels), name='Bias_layer_2'),
]
def neural_network(input, weights, biases):
    for i in range(n_layers-1):
        layer = tf.add(tf.matmul(input if i==0 else layer, weights[i]),biases[i])
        layer = tf.nn.relu(layer)
        # layer = tf.nn.dropout(layer, keep_prob=0.6)
    out_layer = tf.add(tf.matmul(layer, weights[-1]),biases[-1])
    return out_layer

loss_ = []
res = []
prediction = neural_network(features, w, b)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=prediction, labels=labels))
optim = tf.train.AdadeltaOptimizer(0.0001).minimize(loss)
correct_prediction = tf.equal(tf.argmax(prediction, 1), tf.argmax(labels, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
with tf.device('/gpu'):
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for i in range(10):
            for m,n in zip(X_train_batches, y_train_batches):
                _, l = sess.run([optim, loss],feed_dict={features: m, labels: n})
            loss_.append(l)

            acc = sess.run([accuracy], feed_dict={features: X_train, labels: y_train})
            print(i, acc)
        test_accuracy = sess.run(accuracy,feed_dict={features: X_test, labels: y_test})
        print(test_accuracy)
        res = sess.run(neural_network(features,w,b),feed_dict={features: X})
但准确度不会改变

0 [0.4857143]
1 [0.4857143]
2 [0.4857143]
3 [0.4857143]
4 [0.4857143]
5 [0.4857143]
6 [0.4857143]
7 [0.4857143]
8 [0.4857143]
9 [0.4857143]
10 [0.4857143]
0.5333333
损失还是一样

[0.5546836, 0.5546756, 0.5546678, 0.55466014, 0.55465263, 0.5546452, 0.55463773, 0.55463034, 0.5546232, 0.5546159, 0.5546088, 0.5546016, 0.5545944, 0.5545874, 0.5545803, 0.5545734, 0.55456626, 0.5545592, 0.5545522, 0.5545452]

少了什么?我的神经网络正确吗

这里可能有很多可能的原因(我们没有您的数据),但是根据我的经验,在这种情况下经常出现的错误是在
tf.random_normal()
(请参见)中使用默认参数
stddev=1.0
初始化权重,就像您在这里所做的那样

stddev=1.0
是一个巨大的值,仅此一项就可能使您的NN误入歧途。对于所有初始权重,将其更改为
stddev=0.01

w = [
    tf.Variable(tf.random_normal((n_features, 16), stddev=0.01), name='Weights_layer_0'),
    tf.Variable(tf.random_normal((16, 4), stddev=0.01), name='Weights_layer_1'),
    tf.Variable(tf.random_normal((4, n_labels), stddev=0.01), name='Weights_layer_2'),
    ]

除此之外,正如评论中已经指出的那样,
0.0001
的学习率在这里似乎太小了(考虑到损失减少的速度有多慢);使用更高的值进行实验(
0.01-0.001
).

提高学习速度,通常对超参数进行适当的网格搜索。@runDOSrun您确定这与超参数有关吗?问题是,如果您已经删除了超参数作为可能的解释:)一旦代码成功运行,它应该始终是您调查的第一件事。其中一个参数似乎会导致非常小的梯度(请注意,您的损失不会保持不变,只是变化非常缓慢)。事实上,你并不是在寻找一个确定问题所在的人,尤其是因为我们自己无法重现问题;在发送之前,我已经对这些参数做了很多处理,但现在精度没有多大提高0[0.6785714]1[0.69285715]2[0.69285715]3[0.69285715]4[0.69285715]5[0.69285715]6[0.69285715]7[0.69285715]8[0.69285715]10[0.69285715]@AliReza从~0.48(随机猜测)到~0.69(+21%)的改进既不可忽略,也不微不足道——这是“不学习”和“真正学习”之间的区别。正如前面所说的,这里有多种可能的原因,而且答案似乎确实解决了其中一个问题。不要看确切的数量,这一切都在重复@AliReza您是否已经按照建议提高了学习率?你的损失确实在减少(尽管速度很慢);“我用这些参数玩了很多次”本身并不能说明什么-用
stddev=1.0
,无论你玩了多少,你都不会得到任何有意义的结果。是的,我玩了0.1到0.00001的学习率。