簡體   English   中英

如何修復TensorFlow線性回歸在MSE中沒有變化?

[英]How to fix TensorFlow Linear Regression no change in MSE?

我正在研究一個簡單的線性回歸模型,以預測系列中的下一步。 我正在為其提供x / y坐標數據,並且我希望回歸器預測繪圖中下一個點的位置。

我在AdamOptmizer中使用密集層,並將損失函數設置為:

tf.reduce_mean(tf.square(layer_out - y))

我正在嘗試從頭開始創建線性回歸模型(我不想在這里利用TF估計器包)。

我已經看到了通過手動指定權重和偏差來做到這一點的方法,但是沒有深入的回歸。

    X = tf.placeholder(tf.float32, [None, self.data_class.batch_size, self.inputs])
    y = tf.placeholder(tf.float32, [None, self.data_class.batch_size, self.outputs])
    layer_input = tf.layers.dense(inputs=X, units=10, activation=tf.nn.relu)
    layer_hidden = tf.layers.dense(inputs=layer_input, units=10, activation=tf.nn.relu)
    layer_out = tf.layers.dense(inputs=layer_hidden, units=1, activation=tf.nn.relu)
    cost = tf.reduce_mean(tf.square(layer_out - y))
    optmizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate)
    training_op = optmizer.minimize(cost)

    init = tf.initialize_all_variables()
    iterations = 10000
    with tf.Session() as sess:
        init.run()
        for iteration in range(iterations):
            X_batch, y_batch = self.data_class.get_data_batch()
            sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
            if iteration % 100 == 0:
                mse = cost.eval(feed_dict={X:X_batch, y:y_batch})
                print(mse)
        array = []
        for i in range(len(self.data_class.dates), (len(self.data_class.dates)+self.data_class.batch_size)):
            array.append(i)
        x_pred = np.array(array).reshape(1, self.data_class.batch_size, 1)
        y_pred = sess.run(layer_out, feed_dict={X: x_pred})
        print(y_pred)
        predicted = np.array(y_pred).reshape(self.data_class.batch_size)
        predicted = np.insert(predicted, 0, self.data_class.prices[0], axis=0)
        plt.plot(self.data_class.dates, self.data_class.prices)
        array = [self.data_class.dates[0]]
        for i in range(len(self.data_class.dates), (len(self.data_class.dates)+self.data_class.batch_size)):
            array.append(i)

        plt.plot(array, predicted)
        plt.show()

當我進行訓練時,我一次又一次地得到相同的損失值。

它沒有像應該那樣減少,為什么呢?

問題是我正在將激活應用於輸出層。 這導致該輸出轉到其激活到的任何位置。

通過在最后一層中指定Activation = None,深度回歸將按預期工作。

這是更新的體系結構:

layer_input = tf.layers.dense(inputs=X, units=150, activation=tf.nn.relu)
    layer_hidden = tf.layers.dense(inputs=layer_input, units=100, activation=tf.nn.relu)
    layer_out = tf.layers.dense(inputs=layer_hidden, units=1, activation=None)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM