【问题标题】:Debugging Regression with TensorFlow Algorithm - Python使用 TensorFlow 算法调试回归 - Python
【发布时间】:2017-07-14 08:07:17
【问题描述】:

早上好,我在 TensorFlow 方面取得了一些进展,但仍然很困难。我发现很多在线示例都无法运行。

无论如何,我已经尝试编写一些代码来应用多层神经网络来解决回归问题。但是,我只得到零。有谁能帮我找出我的代码和我的理解哪里出了问题?

我在 Windows 10 中使用 Python 3.5 运行 Tensorflow 0.12

非常感谢

import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Parameters
learning_rate = 0.001
training_epochs = 100
batch_size = 5000

# Network Parameters
n_hidden_1 = 256
n_hidden_2 = 10
n_input = 9
n_classes = 1
n_samples = dataVar.shape[0]

# TensorFlow Graph Input
x = tf.placeholder("float", [None, n_input])
if (n_classes > 1):
    y = tf.placeholder("float", [None, n_classes])
else:
    y = tf.placeholder("float", [None,])

# Create Multilayer Model
def multilayer_perceptron(x, weights, biases):
    '''
    x: Place holder for data input
    weights: Dictionary of weights
    biases: Dictionary of biases
    '''

    # First hidden layer with RELU activation
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)

    # Second hidden layer with RELU activation
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)

    # Last output layer with linear activation
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return out_layer

# weights and biases
weights = {
        'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
        'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
        'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}

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([n_classes]))
}

# Construct Model
pred = multilayer_perceptron(x, weights, biases)


# Define loss and optimizer
cost = tf.reduce_mean(tf.square(pred - y))
#cost  = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(cost)

# Initialize variables
init = tf.initialize_all_variables()

# RUNNING THE SESSION

# launch the session
sess = tf.InteractiveSession()


# Initialize all the variables
sess.run(init)

# Training Epochs
for epoch in range(training_epochs):
    # Start with cost = 0
    avg_cost = 0.0

    # Convert total number of batches to integer
    total_batch = int(n_samples/batch_size)

    # Loop over all batches
    for i in range(total_batch):
        # Grab the next batch of training data and labels
        ind = np.random.randint(0, high=dataVar_scaled.shape[0], size=(batch_size))
        batch_x = dataVar_scaled[ind,:]
        batch_y = depth[ind]

        # Feed dictionary for optimization and loss value
        _, c,p = sess.run([optimizer, cost,pred], feed_dict={x: batch_x, y: batch_y})

        # Compute average loss
        avg_cost += c/total_batch

    print("Epoch: {} cost = {:.4f}".format(epoch+1, avg_cost))

print("Model has completed {} Epochs of training".format(training_epochs))


prediction = tf.argmax(sess.run(pred, feed_dict={x:dataVar_scaled}),1).eval()
print(prediction)
plt.plot(prediction,depth,'b.')

【问题讨论】:

    标签: python tensorflow regression


    【解决方案1】:

    我不确定回归是指线性回归还是逻辑回归。但是查看您的代码,我相信您的意思是线性回归。

    如果是线性回归,你的问题出在这行代码:

    prediction = tf.argmax(sess.run(pred, feed_dict={x:dataVar_scaled}),1).eval()

    您正在获取代码中存在的最大值(使用tf.argmax())值的位置。由于n_classes = 1,您的输出中只有一个类,它始终是第一个,这就是您获得零值的原因。 所以将该行更改为

    prediction = sess.run(pred, feed_dict={x:dataVar_scaled}).

    现在你将得到输出的值,而不是最大值的位置。

    如果是逻辑回归,你显然只有一个类。当您的输出仅作为一个类时,您如何进行分类。

    希望对你有所帮助。

    【讨论】:

    • 感谢您的快速回复。对不起,是的,我的意思是线性回归。我已经更改了那行代码,但我仍然让每个输入都等于相同的输出。还有什么我做错了吗?
    • 我用我的更改和我自己的输入浏览了你的代码。它给了我一个非零值。我没有你的dataVar 值。所以我敢肯定,那个变量有问题。确保它们不全为零。如果对您有帮助,请接受我的回答。
    • 感谢您的宝贵时间。我不认为我的输入数据有问题,但我会仔细检查
    • 是的,您需要检查您的输入数据。在您当前的代码中,直接硬编码一些值,然后您会发现您将获得非零值。
    • 我得到一个非零值,无论输入如何,都是相同的值。我认为我需要对pred 进行转置,然后才能得到更好的结果。见stackoverflow.com/questions/38399609/…
    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 2018-05-08
    • 2023-04-09
    • 1970-01-01
    • 2017-11-18
    • 2015-01-09
    • 2019-11-16
    相关资源
    最近更新 更多