天天看點

同樣是儲存模型,model.save()和model. save_weights ()有何差別

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 = MaxPooling2D(pool_size=(2, 2))(x)

   x = Conv2D(64, (3, 3), strides=(1, 1), padding='same')(x)

   x = Conv2D(128, (3, 3), strides=(1, 1), padding='same')(x)

   x = Conv2D(256, (3, 3), strides=(1, 1), padding='same')(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”);