当前位置: 首页 > 知识库问答 >
问题:

在keras中多次拟合模型

秦俊
2023-03-14

我使用的是模型。fit()多次,每次都负责训练一个层块,其他层被冻结

 # create the base pre-trained model
    base_model = efn.EfficientNetB0(input_tensor=input_tensor,weights='imagenet', include_top=False)

    # add a global spatial average pooling layer
    x = base_model.output
    x = GlobalAveragePooling2D()(x)    

    # add a fully-connected layer
    x = Dense(x.shape[1], activation='relu',name='first_dense')(x)
    x=Dropout(0.5)(x)
    x = Dense(x.shape[1], activation='relu',name='output')(x)
    x=Dropout(0.5)(x)

    no_classes=10
    predictions = Dense(no_classes, activation='softmax')(x)

    # this is the model we will train
    model = Model(inputs=base_model.input, outputs=predictions)

    # first: train only the top layers (which were randomly initialized)
    # i.e. freeze all convolutional layers
    for layer in base_model.layers:
        layer.trainable = False

    #FIRST COMPILE
    model.compile(optimizer='Adam', loss=loss_function,
                 metrics=['accuracy'])

    #FIRST FIT
    model.fit(features[train], labels[train],
              batch_size=batch_size,
              epochs=top_epoch,
              verbose=verbosity,
              validation_split=validation_split)

    # Generate generalization metrics
    scores = model.evaluate(features[test], labels[test], verbose=1)  
  
    print(scores)

     #Let all layers be trainable        
    for layer in model.layers:
        layer.trainable = True    

    from tensorflow.keras.optimizers import SGD
#FIRST COMPILE
    model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss=loss_function,
                 metrics=['accuracy'])

    #SECOND FIT
    model.fit(features[train], labels[train],
              batch_size=batch_size,
              epochs=no_epochs,
              verbose=verbosity,
              validation_split=validation_split)
    

奇怪的是,在第二次拟合中,第一个历元的精度远低于第一次拟合的最后一个历元的精度。

纪元40/40 6286/6286 [==============================] - 14s 2ms/样品-损耗: 0.2370-精度: 0.9211-val_loss: 1.3579-val_accuracy:0.6762 874/874 [==============================] - 2s 2ms/样品-损耗: 0.4122-精度: 0.8764

在6286个样本上训练,在1572个样本上验证纪元1/40 6286/6286 [==============================] - 60 9ms/样本-损失: 5.9343-精度: 0.5655-val_loss: 2.4981-val_accuracy: 0.5115

我认为第二次试穿的重量不是从第一次试穿中取出来的

提前感谢!!!

共有2个答案

丌官高远
2023-03-14

我通过删除第二个编译器解决了这个问题。

蒋骏
2023-03-14

我认为这是使用不同优化器的结果。你第一次用亚当,第二次用SGD。试试在第二次试穿中使用亚当,看看它是否正常工作

 类似资料:
  • 本文向大家介绍在keras下实现多个模型的融合方式,包括了在keras下实现多个模型的融合方式的使用技巧和注意事项,需要的朋友参考一下 在网上搜过发现关于keras下的模型融合框架其实很简单,奈何网上说了一大堆,这个东西官方文档上就有,自己写了个demo: 补充知识:keras的融合层使用理解 最近开始研究U-net网络,其中接触到了融合层的概念,做个笔记。 上图为U-net网络,其中上采样层(绿

  • 问题内容: 我想在Python的xlsxwriter中模拟Excel自动拟合功能。根据此网址,不直接支持它:http : //xlsxwriter.readthedocs.io/worksheet.html 但是,在工作表中的每个单元格之间循环并确定列的最大大小,然后使用worksheet.set_column(row,col,width)设置宽度应该非常简单。 使我无法撰写本文的复杂因素包括:

  • 我试图将一个简单的函数与python中的两个独立数据数组相匹配。我知道我需要将自变量的数据组合到一个数组中,但是当我尝试拟合时,传递变量的方式似乎仍然有问题。(之前有几篇与此相关的帖子,但都没有太大帮助。) 我得到的错误是, 什么是的长度?是的长度吗?我到底做错了什么?

  • 我想使用Keras实现下图中描述的模型,但我不知道如何实现。 如果模型的输入像,我需要如何实现它?

  • 在前几节基于Fashion-MNIST数据集的实验中,我们评价了机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不一定更准确。这是为什么呢? 训练误差和泛化误差 在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,

  • 我想计算一个损失函数,它在不同的输入上使用网络的输出两次。例如,假设, 更新:谢谢你们的回复。我想在keras或张量流中重新实现这篇论文。正如其中所解释的,“批评家”网络在GAN中是鉴别器,它有两个输入,一个接一个地运行,并根据输出和计算梯度计算损失函数。主要问题是如何在张量流或Keras中实现?