y=x**2
。但是,看起来深度学习无法学习其训练集范围之外的一般函数。直觉上,我认为神经网络可能无法拟合 y=x**2,因为输入之间没有乘法运算。
请注意,我不是在询问如何创建适合
x**2
的模型。我已经完成了这个任务。我想知道以下问题的答案:
- 我的分析是否正确?
- 如果问题1的答案是肯定的,那么深度学习的预测范围难道不是非常有限吗?
- 是否有更好的算法可以预测像 y=x**2 这样的函数,包括训练数据范围内和范围外的预测?
x = np.random.random((10000,1))*1000-500
y = x**2
x_train= x
训练代码
def getSequentialModel():
model = Sequential()
model.add(layers.Dense(8, kernel_regularizer=regularizers.l2(0.001), activation='relu', input_shape = (1,)))
model.add(layers.Dense(1))
print(model.summary())
return model
def runmodel(model):
model.compile(optimizer=optimizers.rmsprop(lr=0.01),loss='mse')
from keras.callbacks import EarlyStopping
early_stopping_monitor = EarlyStopping(patience=5)
h = model.fit(x_train,y,validation_split=0.2,
epochs= 300,
batch_size=32,
verbose=False,
callbacks=[early_stopping_monitor])
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_18 (Dense) (None, 8) 16
_________________________________________________________________
dense_19 (Dense) (None, 1) 9
=================================================================
Total params: 25
Trainable params: 25
Non-trainable params: 0
_________________________________________________________________
随机测试集上的评估
在这个例子中,深度学习对于预测简单的非线性函数效果不好。但是对于训练数据样本空间中的数值预测表现良好。