张量流训练:为什么连续两次训练比一次训练好

2024-10-03 15:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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)方案1。与第一个模型的两次连续拟合

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)方案2。第二个模型的一个配件

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)方案1 enter image description here

3.2)方案2(500个时代) enter image description here

3.3)使用Scheme2再添加一个测试,并设置epochs=1000 enter image description here

从上面的图片中,我发现即使Scheme2设置了更多的时代,Scheme1也比Scheme2好。你知道吗

有人能解释为什么Scheme1更好吗?谢谢!!!你知道吗


Tags: 模型addmodel方案kerneldenseoptimizerseed