我正在使用Keras Tensorflow处理回归问题 . 我发现了一些有趣的东西 . 1)这里有两个模型,除了第一个模型使用全局定义的“优化器”之外,它们实际上是相同的 .
optimizer = Adam() #as a global variable
def OneHiddenLayer_Model():
model = Sequential()
model.add(Dense(300 * inputDim, input_dim=inputDim, kernel_initializer='normal', activation=activationFunc))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer=optimizer)
return model
def OneHiddenLayer_Model2():
model = Sequential()
model.add(Dense(300 * inputDim, input_dim=inputDim, kernel_initializer='normal', activation=activationFunc))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer=Adam())
return model
2)然后,我使用两种方案来训练数据集(训练集(scaleX,Y);测试集(scaleTestX,testY)) .
2.1)Scheme1 . 与第一个模型连续两次拟合
numpy.random.seed(seed)
model = OneHiddenLayer_Model()
model.fit(scaleX, Y, validation_data=(scaleTestX, testY), epochs=250, batch_size=numBatch, verbose=0)
numpy.random.seed(seed)
model = OneHiddenLayer_Model()
history = model.fit(scaleX, Y, validation_data=(scaleTestX, testY), epochs=500, batch_size=numBatch, verbose=0)
predictY = model.predict(scaleX)
predictTestY = model.predict(scaleTestX)
2.2)Scheme2 . 一个适合第二个模型
numpy.random.seed(seed)
model = OneHiddenLayer_Model2()
history = model.fit(scaleX, Y, validation_data=(scaleTestX, testY), epochs=500, batch_size=numBatch, verbose=0)
predictY = model.predict(scaleX)
predictTestY = model.predict(scaleTestX)
3) . 最后,为每个方案绘制结果,如下所示,(模型损失历史 - >在scaleX上预测 - >在scaleTestX上预测,
3.1)Scheme1
3.2)Scheme2(500个纪元)
3.3)使用Scheme2再添加一个测试并设置epochs = 1000
从上面的图像中,我发现 Scheme1 是 better 而不是 Scheme2 ,即使Scheme2设置了更多的纪元 .
任何人都可以帮忙解释为什么Scheme1更好?非常感谢!!!