get_reduce_mean 总是为0

我正在尝试训练一个预测股票价值的人工智能程序。每次我的成本都是0,我的测试准确率都是100%。我似乎找不到我做错了什么。

placeholder1 = tf.placeholder(tf.float32, shape=[None, 3])#trainersdates_train = np.array(dates[0:8000]).astype(np.float32)highPrice_train = np.array(highPrice[0:8000]).astype(np.float32)print(dates_train[0][0])#testersdates_test = np.array(dates[8000:9564]).astype(np.float32)highPrice_test = np.array(highPrice[8000:9564]).astype(np.float32)def get_training_batch(n):    n = min(n,7999)    idx = np.random.choice(7999,n)    return dates_train[idx],highPrice_train[idx]n_hidden_1 = 100n_hidden_2 = 100weights = {    'h1' : tf.Variable(tf.random_normal([3, n_hidden_1])),    'h2' : tf.Variable(tf.random_normal([n_hidden_1,n_hidden_2])),    'out' : tf.Variable(tf.random_normal([n_hidden_2,1]))}biases = {    'b1' : tf.Variable(tf.random_normal([n_hidden_1])),    'b2' : tf.Variable(tf.random_normal([n_hidden_2])),    'out' : tf.Variable(tf.random_normal([1]))}layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(placeholder1, weights['h1']), biases['b1']))layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['h2']), biases['b2']))y = tf.matmul(layer_2,weights['out']) + biases['out']placeholder2 = tf.placeholder(tf.float32,shape=[None,1])print("Mean")print(sum(highPrice)/len(highPrice))mean = tf.reduce_mean(highPrice)print(mean)cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y, labels=placeholder2))print("Printing cross_entropy")print(cross_entropy)rate = 0.01optimizer = tf.train.GradientDescentOptimizer(rate).minimize(cross_entropy)print(optimizer)prediction = tf.nn.softmax(y)print(prediction)##Trainingcorrect_prediction = tf.equal(tf.argmax(prediction, 1), tf.argmax(placeholder2,1))accuracy = 100 * tf.reduce_mean(tf.cast(correct_prediction, tf.float32))print(accuracy)epochs = 1000batch_size = 10sess = tf.InteractiveSession()sess.run(tf.global_variables_initializer())cost = []accu = []test_accu = []for ep in range(epochs):    x_feed,y_feed = get_training_batch(batch_size)    y_feed = np.reshape(y_feed,[10,1])    _,cos,predictions,acc = sess.run([optimizer, cross_entropy, prediction, accuracy], feed_dict={placeholder1:x_feed, placeholder2:y_feed})    highPrice_test = np.reshape(highPrice_test,[1564,1])    test_acc = accuracy.eval(feed_dict={placeholder1:dates_test, placeholder2:highPrice_test})    cost.append(cos)    accu.append(acc)    test_accu.append(test_acc)    if(ep % (epochs // 10) == 0):        print('[%d]: Cos: %.4f, Acc: %.1f%%, Test Acc: %.1f%%' % (ep,cos,acc,test_acc))plt.plot(cost)plt.title('cost')plt.show()plt.plot(accu)plt.title('Train Accuracy')plt.show()plt.plot(test_accu)plt.title('Test Accuracy')plt.show()index = 36p = sess.run(prediction, feed_dict = {placeholder1:dates_train[index:index +1]})[0]

[0]: Cos: 0.0000, Acc: 100.0%, Test Acc: 100.0%[100]: Cos: 0.0000, Acc: 100.0%, Test Acc: 100.0%

这是我每次测试的输出。我期望有成本,并且准确率不应该是100%


回答:

看起来问题在于softmax_cross_entropy_with_logits_v2需要超过一个输出类:TensorFlow中二元分类成本函数总是返回零。如果我将highPrice改为二维的,它就能工作了。

作为补充说明,如果我正确理解了您的问题,您是试图预测确切的股票价格。更好的方法可能是只预测它是上涨还是下跌,这样您可以创建分类标签,比如(上涨,无变化,下跌)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注