在使用 TensorFlow 实现多元线性回归时,可能会遇到占位符和矩阵乘法的错误。以下是一个完整的示例,展示如何正确地使用占位符和矩阵乘法来实现多元线性回归。
import tensorflow as tf
import numpy as np
# 生成一些示例数据
np.random.seed(0)
X_data = np.random.rand(100, 3) # 100个样本,每个样本有3个特征
y_data = X_data @ np.array([1.5, -2.0, 1.0]) + 0.5 # 线性关系 y = 1.5*x1 - 2.0*x2 + 1.0*x3 + 0.5
# 定义占位符
X = tf.placeholder(tf.float32, shape=[None, 3], name='X')
y = tf.placeholder(tf.float32, shape=[None], name='y')
# 定义权重和偏置
W = tf.Variable(tf.random_normal([3, 1]), name='weights')
b = tf.Variable(tf.random_normal([1]), name='bias')
# 预测值
y_pred = tf.add(tf.matmul(X, W), b)
# 损失函数(均方误差)
loss = tf.reduce_mean(tf.square(y_pred - y))
# 优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
# 初始化变量
init = tf.global_variables_initializer()
# 训练模型
with tf.Session() as sess:
sess.run(init)
for epoch in range(1000):
_, l = sess.run([optimizer, loss], feed_dict={X: X_data, y: y_data})
if (epoch + 1) % 100 == 0:
print(f'Epoch {epoch + 1}, Loss: {l}')
# 获取训练后的权重和偏置
W_value, b_value = sess.run([W, b])
print(f'Trained weights: {W_value.flatten()}')
print(f'Trained bias: {b_value[0]}')
# 预测
with tf.Session() as sess:
sess.run(init)
y_pred_value = sess.run(y_pred, feed_dict={X: X_data})
print(f'Predictions: {y_pred_value.flatten()}')
tf.placeholder
定义输入数据 X
和目标值 y
。X
的形状是 [None, 3]
,表示任意数量的样本,每个样本有3个特征。y
的形状是 [None]
,表示任意数量的目标值。tf.Variable
定义权重 W
和偏置 b
。W
的形状是 [3, 1]
,表示3个特征对应的权重。b
的形状是 [1]
,表示偏置。tf.add
和 tf.matmul
进行矩阵乘法和加法,计算预测值 y_pred
。tf.reduce_mean
和 tf.square
计算均方误差损失。tf.train.GradientDescentOptimizer
定义优化器,并最小化损失函数。领取专属 10元无门槛券
手把手带您无忧上云