我正在尝试训练一个预测股票价值的人工智能程序。每次我的成本都是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改为二维的,它就能工作了。
作为补充说明,如果我正确理解了您的问题,您是试图预测确切的股票价格。更好的方法可能是只预测它是上涨还是下跌,这样您可以创建分类标签,比如(上涨,无变化,下跌)。