fluid版本如何实现自定义线性回归?
Created by: yeyupiaoling
以下是tensorflow的自定义线性回归的例子,我按照这个改成PaddleFluid
import tensorflow as tf
import numpy as np
# 定义数据
X = np.array([1., 2., 3., 4., 5.])
y = np.array([3., 5., 7., 9., 11.])
# 定义占位符
X_ = tf.placeholder(dtype=tf.float32)
y_ = tf.placeholder(dtype=tf.float32)
a = tf.get_variable('a', dtype=tf.float32, shape=[], initializer=tf.zeros_initializer)
b = tf.get_variable('b', dtype=tf.float32, shape=[], initializer=tf.zeros_initializer)
# 定义计算公式和损失函数
y_pred = a * X_ + b
loss = tf.constant(0.5) * tf.reduce_sum(tf.square(y_pred - y_))
# 定义优化方法
train_op = tf.train.GradientDescentOptimizer(learning_rate=1e-3).minimize(loss)
# 开始训练
num_epoch = 10000
learning_rate = 1e-3
with tf.Session() as sess:
tf.global_variables_initializer().run()
for e in range(num_epoch):
sess.run(train_op,
feed_dict={X_: X, y_: y})
# 答应a和b
print(sess.run([a, b]))
以下是PaaddleFluid的例子,运行没有通过,应该要怎么修改呢?
import paddle.fluid as fluid
import numpy as np
X = np.array([1., 2., 3., 4., 5.])
y = np.array([3., 5., 7., 8., 11.])
X_ = fluid.layers.create_tensor(dtype="float32")
y_ = fluid.layers.create_tensor(dtype="float32")
a = fluid.layers.create_global_var(shape=[], dtype="float32", name='a', value=0)
b = fluid.layers.create_global_var(shape=[], dtype="float32", name='b', value=0)
y_pred = fluid.layers.mul(a, X_) + b
loss = fluid.layers.mul(fluid.layers.fill_constant(shape=[1], value=0.5, dtype="float32"),
fluid.layers.reduce_sum(fluid.layers.square(y_pred - y_)))
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=1e-3)
optimizer.minimize(loss)
cpu = fluid.CPUPlace()
exe = fluid.executor.Executor(cpu)
exe.run(fluid.default_startup_program())
for pass_id in range(100):
out = exe.run(fluid.default_main_program(),
feed={X_: X, y_: y},
fetch_list=[loss])
print(out)