使用隐藏层解决非线性问题:
输入层: 隐藏层: 输出层:
import tensorflow as tf
import numpy as np
learning_rate = 0.0001
n_input = 2
n_label = 1
n_hidden = 2
x = tf.placeholder(tf.float32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_label])
weights = {
'h1': tf.Variable(tf.truncated_normal([ n_input, n_hidden], stddev =0.1)),
'h2': tf.Variable(tf.truncated_normal([n_hidden, n_label], stddev =0.1))
}
biases = {
'h1': tf.Variable(tf.zeros([n_hidden])),
'h2': tf.Variable(tf.zeros([n_label]))
}
layer_1 = tf.nn.relu(tf.add(tf.matmul(x, weights['h1']), biases['h1']))
y_pred = tf.nn.tanh(tf.add(tf.matmul(layer_1,weights['h2']), biases['h2']))
loss = tf.reduce_mean((y_pred - y)**2)
train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss)
X = [[0,0],[0,1],[1,0],[1,1]]
Y = [[0],[1],[1],[0]]
X = np.array(X).astype('float32')
Y = np.array(Y).astype('int16')
# 迭代训练模型
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
for i in range(1000):
sess.run(train_step, feed_dict = {x:X, y:Y})
# 计算预测值
print(sess.run(y_pred, feed_dict={x:X}))
# 查看隐藏层的输出
print(sess.run(layer_1, feed_dict = {x:X}))
结果:
[[ 9.9999961e-05]
[-1.2277756e-03]
[-1.2540328e-02]
[-1.3875227e-02]]
[[0. 0. ]
[0.01804843 0. ]
[0.17182861 0. ]
[0.18997703 0. ]]
[[ 0.0002 ]
[-0.00111128]
[-0.01240848]
[-0.01373422]]
......