Тензорный многомерный вывод (прогноз) регрессии - PullRequest
0 голосов
/ 11 декабря 2018

Я не могу обернуться, как вернуть несколько предсказаний для одного массива входных данных.Представьте себе случай использования для прогнозирования массивов координат x, y по заданному входному массиву.Я создал простой сценарий, чтобы проиллюстрировать, чего именно я пытаюсь достичь (обратите внимание на комментарии):

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

input = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
output_1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
output_2 = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])

learning_rate = 0.001
training_epochs = 10000

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

weights = {
    "w1": tf.Variable(tf.random_normal([10], 0, 0.1), tf.float32),
    "w2": tf.Variable(tf.random_normal([10], 0, 0.1), tf.float32),
    "out": tf.Variable(tf.random_normal([10], 0, 0.1), tf.float32)
}

biases = {
    "b1": tf.Variable(tf.random_normal([10], 0, 0.1), tf.float32),
    "b2": tf.Variable(tf.random_normal([10], 0, 0.1), tf.float32),
    "out": tf.Variable(tf.random_normal([10], 0, 0.1), tf.float32)
}

layer_1_tensor_1 = tf.nn.tanh(tf.add(tf.multiply(weights["w1"], x), biases["b1"]))
layer_2_tensor_1 = tf.nn.tanh(tf.add(tf.multiply(weights["w2"], layer_1_tensor_1), biases["b2"]))
layer_out = tf.add(tf.multiply(weights["out"], layer_2_tensor_1), biases["out"])

prediction = layer_out
loss = tf.reduce_mean(tf.square(prediction - y))

optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

tf.summary.scalar("loss", loss)
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(training_epochs):
        feed_dict = {
            x: input,
            y: output_1
        }
        _, l  = sess.run([train, loss], feed_dict)
        print('Step %i: Loss: %f' % (epoch, l))
    fig = plt.figure()
    ax = Axes3D(fig)
    # Should look like this scatter plot:
    ax.scatter(output_1, output_2, input, marker='.')
    predicted = sess.run([prediction], feed_dict={x: input})
    # I want to anchieve something like: ax.scatter(predicted[0], predicted[1], input, marker='o').
    # Currently my y axis is unknown, thus np.zeros(10).
    ax.scatter(predicted, np.zeros(10), input, marker='o')
    plt.show()

Я могу предсказать output_1 или output_2, но не оба.Как мне сделать это правильно?Я пытался поиграться с фигурами, но столкнулся со многими ошибками и использовал два выходных тензора, что также было неудачной попыткой.

Примечание. Я не пытаюсь достичь наилучшей модели.Меня интересуют технические детали того, как вернуть двухмерное предсказание.По крайней мере, некоторые ссылки на статьи или подобные вопросы / проблемы будут очень полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...