У Tensorflow возникли проблемы при оценке моей тестовой модели - PullRequest
0 голосов
/ 26 февраля 2019

Вот мой простой код.Цель состоит в том, чтобы предсказать кривую ay = x² из данных.

import matplotlib.pyplot as plt
import tensorflow as tf
%matplotlib inline

#input data
x_data = np.linspace(0,10,11)
y_data=x_data**2

#Data for testing
x_test = np.linspace(0,10,11)

#placeholders
X = tf.placeholder("float32", [None, 11])
Y = tf.placeholder("float32", [None, 11])

#Neural Network Model
def multilayer_perceptron(X, weights, biases):
    layer_1 = tf.add(tf.matmul(X, weights['h1']), biases['b1'])
    layer_1 = tf.nn.sigmoid(layer_1)
    out_layer = tf.matmul(layer_1, weights['out']) + biases['out']
    return out_layer

# Store layers weight & bias
weights = {
    'h1': tf.Variable(tf.random_normal([11, 2], 0, 0.1)),
    'out': tf.Variable(tf.random_normal([2, 1], 0, 0.1))
}
biases = {
    'b1': tf.Variable(tf.random_normal([2], 0, 0.1)),
    'out': tf.Variable(tf.random_normal([1], 0, 0.1))
}

# Construct model
pred = multilayer_perceptron(X, weights, biases)

# Define loss and optimizer
cost = tf.reduce_mean(tf.square(pred-Y))
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)

init = tf.global_variables_initializer()

#Session Eval
with tf.Session() as sess:
    sess.run(init)
    epochs = 10000
    for i in range(epochs):
        o, c, p = sess.run([optimizer, cost, pred], feed_dict={X: x_data.reshape([1,11]),Y: y_data.reshape([1,11])})
    pred_value = sess.run([pred],feed_dict={X: x_test.reshape([1,11])})

Последняя строка вызывает сеанс для оценки pred, используя x_test в качестве входного права?Когда я запускаю этот код, pred_value - это просто ОДНО случайное число вместо 11 возможных правильных значений.Я не знаю, что не так с кодом

1 Ответ

0 голосов
/ 26 февраля 2019

Это потому, что форма вашего выходного слоя (None, 1).Это должно быть (None, 11), чтобы получить желаемый результат.Следовательно, вам придется изменить форму от weights['out'] до (2,11) и biases['out'] до (11).

Полный рабочий код приведен ниже.

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
# %matplotlib inline

#input data
x_data = np.linspace(0,10,11)
y_data=x_data**2

#Data for testing
x_test = np.linspace(0,10,11)

#placeholders
X = tf.placeholder("float32", [None, 11])
Y = tf.placeholder("float32", [None, 11])

#Neural Network Model
def multilayer_perceptron(X, weights, biases):
    layer_1 = tf.add(tf.matmul(X, weights['h1']), biases['b1'])
    layer_1 = tf.nn.sigmoid(layer_1)
    out_layer = tf.matmul(layer_1, weights['out']) + biases['out']
    print (out_layer.shape)
    return out_layer

# Store layers weight & bias
weights = {
    'h1': tf.Variable(tf.random_normal([11, 2], 0, 0.1)),
    'out': tf.Variable(tf.random_normal([2, 11], 0, 0.1))
}
biases = {
    'b1': tf.Variable(tf.random_normal([2], 0, 0.1)),
    'out': tf.Variable(tf.random_normal([11], 0, 0.1))
}

# Construct model
pred = multilayer_perceptron(X, weights, biases)

# Define loss and optimizer
cost = tf.reduce_mean(tf.square(pred-Y))
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)

init = tf.global_variables_initializer()

#Session Eval
with tf.Session() as sess:
    sess.run(init)
    epochs = 10000
    for i in range(epochs):
        o, c, p = sess.run([optimizer, cost, pred], feed_dict={X: x_data.reshape([1,11]),Y: y_data.reshape([1,11])})
        # print (p.shape)
    pred_value = sess.run([pred],feed_dict={X: x_test.reshape([1,11])})
    print (pred_value)

И выводследующим образом.

[array([[ 0.       ,  1.       ,  3.9999986,  8.999985 , 15.999548 ,
        23.496645 , 26.745462 , 28.187344 , 28.973213 , 28.841356 ,
        29.02704  ]], dtype=float32)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...