python - 为什么神经网络在正弦波回归上如此困难
问题描述
我一直在尝试使用不同类型的人工神经网络来对基本的和越来越复杂的函数进行回归。对我来说,似乎我无法让我的网络学习像正弦波这样的循环函数。我在网上和这个论坛上读到,通常 ANN 不擅长这项工作,但我似乎无法理解为什么。学习其领域内的任何功能不都是一样的吗?
为了澄清起见,我尝试使用以下设置拟合从 x=0 到 x=100 的正弦波
def create_model():
model = tf.keras.models.Sequential([
keras.layers.Dense(units=1, activation=None,input_dim=1,kernel_initializer='random_normal'),
keras.layers.Dense(units=64,activation='linear',use_bias=True),
keras.layers.Dense(units=32,activation="relu",use_bias=True),
keras.layers.Dense(units=64,activation="relu"),
keras.layers.Dense(units=64,activation='linear',use_bias=True),
keras.layers.Dense(units=32,activation='relu'),
keras.layers.Dense(units=1, activation='sigmoid'),
])
model.compile(optimizer='adam',
loss='mean_squared_logarithmic_error',
metrics=['mean_squared_error'])
return model
# Create a basic model instance
model = create_model()
# Display the model's architecture
model.summary()`
我已将我的数据规范化以适合 [x,y]=[0,1]^2 空间并将其输入网络。我给了网络 1000 分,并让它训练了很多个 epoch(~100,000),这些是我得到的结果:
我可以理解这是标准的过拟合行为,但我不明白为什么会这样。在 Goodfellow 的深度学习(我正在阅读)中,他解释说机器学习算法的最佳行为介于过拟合和欠拟合区域之间。看来我创建的模型在未来不会收敛到解决方案,并且预计会表现更差!
这是否意味着它不能插入到正弦函数?另外,为什么这个函数的计算要求比其他函数要高得多(我尝试过的最简单的函数在 <1000 个时期内收敛)?这是否意味着它需要更多的层或者每层可能需要更多的单元?我理解这个问题是一个经典的回归问题,我认为顺序模型很好。
最后但并非最不重要的一点是,我知道 ANN 不是用于周期函数的方法,但我试图理解为什么它们在作为回归方法中挣扎。
解决方案
推荐阅读
- python - 在 Twisted 中执行具有时间增量的函数的最佳方法?
- c# - 实体框架级联删除(继承)
- angular - 将角度从 6.1 更新到 8.2
- angular - 如何将带有标题 Ag Grid Angular 的表格分成两部分
- javascript - 检查数组是否在 Angular 中有值
- python - 使用 Python 和 Selenium 包创建一个脚本来关闭 Chrome 暗模式。如何在 chrome:// 中选择元素?
- c - 警告:格式“%lf”需要“double”类型的参数
- node.js - 在角度通用应用程序中设置动态数据
- java - 将 Java 参数值分配给变量
- debugging - 无法在 Autohotkey 中发送 win+s