使用Tensorflow线性拟合二维空间的一条曲线,在曲线上方的点标蓝,下方的点标红。 曲线方程:1)y=2x+1; 2) y=x12+1 (二选一) 测试集:[-2,-4],[-1,0],[O,0],[0,2].[1,2.5],[2,6]原理
时间: 2023-10-01 22:03:14 浏览: 77
这是一个简单的二分类问题,我们可以使用 Tensorflow 来训练一个线性分类器来解决。以下是一个基本的示例代码:
```python
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
# 定义曲线方程
def curve1(x):
return 2 * x + 1
def curve2(x):
return x ** 2 + 1
# 定义训练数据和标签
train_data = np.array([[-2, 3], [-1, 1], [0, 1], [0, 5], [1, 2.5], [2, 7]])
train_label = np.array([0, 1, 1, 0, 0, 1])
# 创建输入占位符
x = tf.placeholder(tf.float32, [None, 2])
# 创建权重和偏置变量
W = tf.Variable(tf.zeros([2, 1]))
b = tf.Variable(tf.zeros([1]))
# 定义模型
y = tf.matmul(x, W) + b
# 创建真实标签占位符
y_ = tf.placeholder(tf.float32, [None, 1])
# 定义损失函数
cross_entropy = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_))
# 选择优化算法
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# 创建会话并初始化变量
sess = tf.Session()
sess.run(tf.global_variables_initializer())
# 训练模型
for i in range(1000):
sess.run(train_step, feed_dict={x: train_data, y_: train_label.reshape(-1, 1)})
# 绘制决策边界
x_vals = np.linspace(-2, 2, 100)
if curve1 == True:
y_vals = curve1(x_vals)
else:
y_vals = curve2(x_vals)
y_vals = y_vals.reshape(-1, 1)
decision_boundary = - (sess.run(b) / sess.run(W)[0]) * x_vals
# 绘制结果图
plt.scatter(train_data[:, 0], train_data[:, 1], c=train_label)
plt.plot(x_vals, y_vals, 'r--', linewidth=2)
plt.plot(x_vals, decision_boundary, 'b-', linewidth=2)
plt.show()
```
在上述代码中,我们首先定义了两条曲线方程:$y=2x+1$ 和 $y=x^2+1$,以及一些训练数据和标签。然后我们定义了一个线性模型,并使用梯度下降算法来训练模型。最后,我们绘制了决策边界和训练数据的散点图来展示结果。
原理是,我们首先定义一个线性模型 $y=wx+b$,其中 $w$ 和 $b$ 是需要学习的参数。然后我们使用训练数据和标签来训练模型,使得模型能够将上方的点标为正类,下方的点标为负类。最后,我们可以使用训练好的模型来对新的数据进行分类。
阅读全文