Это потому, что форма вашего выходного слоя (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)]