使用函数 y = -2x1+5x2+46 产生一组随机数,其中x1取值 [2, 22],x2取值 [40, 120],对每个y值添加一个 [-50, 50] 范围内的噪声。
(1)请实现一个双进单出的线性神经元网络,并用你产生的这组数据去训练它。
(2)使用你训练好的网络,预测一下,当 (x1, x2) = (19, 120) 时,y的值是多少?
使用函数 y = -2x1+5x2+46 产生一组随机数,其中x1取值 [2, 22],x2取值 [40, 120],对每个y值添加一个 [-50, 50] 范围内的噪声。
(1)请实现一个双进单出的线性神经元网络,并用你产生的这组数据去训练它。
(2)使用你训练好的网络,预测一下,当 (x1, x2) = (19, 120) 时,y的值是多少?
你可以使用以下代码在Python中生成一组随机数,并添加噪声:
import random
# 生成随机数
x1 = random.uniform(2, 22)
x2 = random.uniform(40, 120)
y = -2*x1 + 5*x2 + 46
# 添加噪声
noise = random.uniform(-50, 50)
y_noisy = y + noise
接下来,你可以使用Keras库来实现一个双进单出的线性神经元网络,并用你产生的数据去训练它。以下是一个简单的示例代码:
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
# 生成训练数据
X = np.random.uniform(low=[2, 40], high=[22, 120], size=(1000, 2))
y = np.array([-2*x[0] + 5*x[1] + 46 for x in X])
y_noisy = y + np.random.uniform(low=-50, high=50, size=(1000,))
# 定义模型
model = Sequential()
model.add(Dense(1, input_dim=2))
# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(X, y_noisy, epochs=100, batch_size=10)
# 预测值
x_test = np.array([[19, 120]])
y_pred = model.predict(x_test)
print(y_pred)
在上面的代码中,我们首先生成了1000个随机的(x1, x2, y)数据点,并添加了噪声。然后,我们定义了一个包含一个输入层和一个输出层的线性神经元网络,并使用均方误差作为损失函数进行编译。最后,我们使用训练好的模型来预测当(x1, x2) = (19, 120)时,y的值。