同样是保存模型,model.save()和model. save_weights ()有何区别 淡淡的烟草味﹌ 2022-12-19 13:28 154阅读 0赞 **model.save()**保存了模型的图结构和模型的参数,保存模型的后缀是.hdf5。 **model. save\_weights** ()只保存了模型的参数,并没有保存模型的图结构,保存模型的后缀使用.h5。 所以使用save\_weights保存的模型比使用save() 保存的模型的大小要小。同时加载模型时的方法也不同。model.save()保存了模型的图结构,直接使用load\_model()方法就可加载模型然后做测试,例: from tensorflow.keras.models import load\_model model=load_model("my_model_.hdf5") 加载save\_weights保存的模型就稍微复杂了一些,还需要再次描述模型结构信息才能加载模型。例: def bn\_prelu(x): x = BatchNormalization(epsilon=1e-5)(x) x = PReLU()(x) return x def build\_model(out\_dims, input\_shape=(norm\_size, norm\_size, 3)): inputs\_dim = Input(input\_shape) x = Conv2D(32, (3, 3), strides=(2, 2), padding='same')(inputs\_dim) x = bn\_prelu(x) x = Conv2D(32, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = MaxPooling2D(pool\_size=(2, 2))(x) x = Conv2D(64, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = Conv2D(64, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = MaxPooling2D(pool\_size=(2, 2))(x) x = Conv2D(128, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = Conv2D(128, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = MaxPooling2D(pool\_size=(2, 2))(x) x = Conv2D(256, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = Conv2D(256, (3, 3), strides=(1, 1), padding='same')(x) x = bn\_prelu(x) x = GlobalAveragePooling2D()(x) dp\_1 = Dropout(0.5)(x) fc2 = Dense(out\_dims)(dp\_1) fc2 = Activation('softmax')(fc2) \#此处注意,为sigmoid函数 model = Model(inputs=inputs\_dim, outputs=fc2) return model model=build\_model(labelnum) model. load\_weights(“my\_model\_.h5”);
还没有评论,来说两句吧...