请问 我想用神经网络拟合一个阿基米德螺旋线,下面是原代码,但是出现错误了 ,请问怎么改?谢谢!
原代码:
import numpy as np
import tensorflow as tf
# 设定阿基米德螺旋线(9.4*t*cos(t), 9.4*t*sin(t))为目标曲线
def target_curve(t):
return [9.4 * t * np.cos(t), 9.4 * t * np.sin(t)] # 返回一个元组
# 训练数据生成函数:随机产生1000个点并分别计算其坐标值以及对应的t值(作为输入)
def generate_data(num_samples=1000):
xs = []
ys = []
ts = []
for _ in range(num_samples):
t_value = (np.random.rand() - 0.5) * 20 # 随机选择[-10,10]之间的t值. numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中:本函数可以返回一个或一组服从**“0~1”均匀分布**的随机样本值。
x_, y_ = target_curve(t_value) # 给元组赋值一一对应
noise_x, noise_y = (np.random.randn() / 50), (np.random.randn() / 50) # 添加少量噪声 numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。
xs.append(x_ + noise_x)
ys.append(y_ + noise_y)
ts.append([t_value])
return {'inputs': ts, 'outputs': [xs, ys]}
training_data_set_size = 50000
num_epochs = 200
batch_size = 128
train_input_fn = tf.estimator.inputs.numpy_input_fn(generate_data(training_data_set_size)['inputs'], y=None,
batch_size=batch_size, num_epochs=num_epochs, shuffle=True)
feature_columns = [tf.feature_column.numeric_column('x')] # 参数给出了神经网络输入层需要用到的数据
model_dir = './trained_models/model/'
estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns, model_dir=model_dir)
estimator.train(train_input_fn, steps=None)
t = np.linspace(0, np.pi * 10, 100) # 给了个数列
predict_input_fn = tf.estimator.inputs.numpy_input_fn({'x': np.expand_dims(t, -1)}, shuffle=False)
result = [pred['predictions'] for pred in estimator.predict(predict_input_fn)]
print("阿基米德曲线公式:r=a·θ")
print(f"其中a={9.4}")
# 输出生成的拟合参数
print(f"p(x)={round(estimator.get_variable_value('linear/linear_model/x/weights')[0][0], 2)}t",
f"+{round(estimator.get_variable_value('linear/linear_model/bias_weights')[0], 2)}")
显示的错误位置和原因:
Traceback (most recent call last):
File "D:\copy-teaching\Software Application\pythonProject2\main.py", line 32, in <module>
train_input_fn = tf.estimator.inputs.numpy_input_fn(generate_data(training_data_set_size)['inputs'], y=None,
File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\util\lazy_loader.py", line 59, in __getattr__
return getattr(module, item)
AttributeError: module 'tensorflow_estimator.python.estimator.api._v2.estimator' has no attribute 'inputs'
请问怎么改?谢谢!
