在python中, 采用基本TensorFlow API实现sin函数拟合,使用5个或者7个样本拟合sin函数,添加正则化项。给出详细的python代码
时间: 2024-05-06 14:19:28 浏览: 162
以下是基于 TensorFlow API 实现 sin 函数拟合的 python 代码样例,同时包括了正则化项:
``` python
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 生成 sin 函数的训练集数据
train_x = np.linspace(-1, 1, 5)
train_y = np.sin(train_x * np.pi)
# 定义输入输出占位符
x = tf.placeholder(tf.float32, [None, 1])
y = tf.placeholder(tf.float32, [None, 1])
# 定义神经网络结构
hidden_size = 10
W1 = tf.Variable(tf.random_normal([1, hidden_size]))
b1 = tf.Variable(tf.zeros([hidden_size]))
W2 = tf.Variable(tf.random_normal([hidden_size, 1]))
b2 = tf.Variable(tf.zeros([1]))
hidden_output = tf.nn.relu(tf.matmul(x, W1) + b1)
output = tf.matmul(hidden_output, W2) + b2
# 定义正则化项
regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
reg_term = tf.contrib.layers.apply_regularization(regularizer, [W1, W2])
# 定义损失函数和优化器
loss = tf.reduce_mean(tf.square(y - output)) + reg_term
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
# 初始化模型参数
init = tf.global_variables_initializer()
# 训练模型
with tf.Session() as sess:
sess.run(init)
for epoch in range(1000):
sess.run(train_step, feed_dict={x: train_x.reshape([-1, 1]), y: train_y.reshape([-1, 1])})
if epoch % 100 == 0:
mse = sess.run(loss, feed_dict={x: train_x.reshape([-1, 1]), y: train_y.reshape([-1, 1])})
print("Epoch: %d, MSE: %f" % (epoch, mse))
# 在测试集上进行预测
test_x = np.linspace(-1, 1, 100)
test_y = sess.run(output, feed_dict={x: test_x.reshape([-1, 1])})
# 可视化预测结果和训练数据
plt.plot(train_x, train_y, 'bo', label='Training data')
plt.plot(test_x, test_y, 'r', label='Predicted')
plt.legend()
plt.show()
```
其中,正则化项可以通过 `tf.contrib.layers.apply_regularization()` 函数实现,通过调整 `scale` 参数可以控制正则化项的系数大小。示例中采用的是 L2 正则化项,也可以使用 L1、ElasticNet、Group Lasso 等不同类型的正则化项。训练的过程中每 100 步输出一次 MSE 值,同时可视化训练数据和模型预测结果。
阅读全文