Python 如何使用Keras预测函数/表?

Python 如何使用Keras预测函数/表?,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我目前正在学习keras。我的目标是创建一个简单的模型,预测函数的值。首先,我创建两个数组,一个用于X值,另一个用于相应的Y值 #为训练数据声明和初始化数组 X=np.arange(0.0,10.0,0.05) Y=np.empty(shape=0,dtype=float) #计算Y值 对于x中的x: Y=np.追加(Y,浮动(0.05*(15.72807*x-7.273893*x**2+1.4912*x**3-0.1384615*x**4+0.00474359*x**5)) 然后我创建并训练

我目前正在学习keras。我的目标是创建一个简单的模型,预测函数的值。首先,我创建两个数组,一个用于X值,另一个用于相应的Y值

#为训练数据声明和初始化数组
X=np.arange(0.0,10.0,0.05)
Y=np.empty(shape=0,dtype=float)
#计算Y值
对于x中的x:
Y=np.追加(Y,浮动(0.05*(15.72807*x-7.273893*x**2+1.4912*x**3-0.1384615*x**4+0.00474359*x**5))
然后我创建并训练模型

#模型架构
模型=顺序()
添加(密集(1,输入_形状=(1,))
模型。添加(密度(5))
model.add(稠密(1,activation='linear'))
#编译模型
compile(loss='mean\u absolute\u error',optimizer='adam',metrics=['accurity'])
#列车模型
模型拟合(X,Y,历次=150,批次大小=10)
并使用该模型预测值

#声明和初始化用于预测的数组
yppredict=np.empty(shape=0,dtype=float)
#预测Y
YPredict=模型。预测(X)
#绘图训练数据和预测
plt.绘图(X,Y,'C0')
plt.绘图(X,Y预测,'C1')
#显示图形
plt.show()
我得到这个输出(蓝色是训练数据,橙色是预测):


我做错了什么?我想这是网络体系结构的一个基本问题,对吗?

问题确实在于您的网络体系结构。具体来说,您在所有层中使用线性激活:这意味着网络只能适应线性函数。您应在输出层中保持线性激活,但应在隐藏层中使用ReLU激活:

model.add(密集型(1,输入_形=(1,))
model.add(密集(5,activation='relu'))
model.add(稠密(1,activation='linear'))

然后,播放隐藏层的数量/大小;我建议你多用几个。

在BlackBear提供的答案之上:

  • 在将输入X和输出Y输入到神经网络之前,您应该将它们正常化:

    #功能缩放(忽略因整数转换为浮点数而可能出现的警告)
    从sklearn.preprocessing导入StandardScaler
    sc_X=StandardScaler()
    X_序列=sc_X.拟合变换(X)
    sc_Y=StandardScaler()
    Y_序列=sc_Y.拟合变换(Y)
    # [...]
    模型拟合(X_系列,Y_系列,…)
    
    看看如果你不这样做会发生什么,在一个与你非常相似的回归设置中。请记住,您应该使用
    sc_X
    以类似方式缩放任何测试数据;此外,如果以后需要将模型生成的任何
    预测
    缩放回Y的原始比例,则应使用

    sc_Y.逆变换(预测)
    
  • 在像您这样的回归设置中,准确性没有任何意义;您应该从您的模型编译中删除
    metrics=['accurity']
    (这里损失本身作为一个度量就足够了)