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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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