Python 加载重量TensorFlow 2.0模型误差

Python 加载重量TensorFlow 2.0模型误差,python,tensorflow,Python,Tensorflow,我正在使用Python3.X和TensorFlow 2.0以及“TensorFlow_model_optimization”软件包进行神经网络修剪。我的代码如下- from tensorflow_model_optimization.sparsity import keras as sparsity l = tf.keras.layers # Original model without pruning- model = Sequential() model.add(l.InputLay

我正在使用Python3.X和TensorFlow 2.0以及“TensorFlow_model_optimization”软件包进行神经网络修剪。我的代码如下-

from tensorflow_model_optimization.sparsity import keras as sparsity


l = tf.keras.layers


# Original model without pruning-
model = Sequential()
model.add(l.InputLayer(input_shape = (784, )))
model.add(Flatten())
model.add(Dense(units = 300, activation='relu', kernel_initializer = tf.initializers.GlorotUniform()))
model.add(l.Dropout(0.2))
model.add(Dense(units = 100, activation='relu', kernel_initializer = tf.initializers.GlorotUniform()))
model.add(l.Dropout(0.1))
model.add(Dense(units = num_classes, activation='softmax'))

# Define callbacks-
callbacks = [
              # tf.keras.callbacks.TensorBoard(log_dir=logdir, profile_batch = 0),
             tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience = 3)
]

# Compile designed Neural Network-
model.compile(
    loss = tf.keras.losses.categorical_crossentropy,
    optimizer = 'adam',
    metrics = ['accuracy'])

# Save untrained and initial weights to disk-
model.save_weights("Initial_non_trained_weights.h5")


epochs = 12

num_train_samples = X_train.shape[0]

end_step = np.ceil(1.0 * num_train_samples / batch_size).astype(np.int32) * epochs

print("end_step parameter for this dataset =  {0}".format(end_step))
# end_step = 5628

# Specify the parameters to be used for layer-wise pruning:
pruning_params = {
    'pruning_schedule': sparsity.PolynomialDecay(
        initial_sparsity=0.50, final_sparsity=0.90,
        begin_step=2000, end_step=end_step, frequency=100)
}


# Neural network which is to be pruned-
pruned_model = Sequential()
pruned_model.add(l.InputLayer(input_shape=(784, )))
pruned_model.add(Flatten())
pruned_model.add(sparsity.prune_low_magnitude(Dense(units = 300, activation='relu', kernel_initializer=tf.initializers.GlorotUniform()),
                                              **pruning_params))
pruned_model.add(l.Dropout(0.2))
pruned_model.add(sparsity.prune_low_magnitude(Dense(units = 100, activation='relu', kernel_initializer=tf.initializers.GlorotUniform()),
                                              **pruning_params))
pruned_model.add(l.Dropout(0.1))
pruned_model.add(sparsity.prune_low_magnitude(Dense(units = num_classes, activation='softmax'), **pruning_params))

# Compile pruned CNN-
pruned_model.compile(
    loss=tf.keras.losses.categorical_crossentropy,
    optimizer='adam',
    metrics=['accuracy'])

# Load weights from before-
pruned_model.load_weights("Initial_non_trained_weights.h5")
将初始权重加载到修剪模型的最后一行给了我错误:

ValueError: Layer #0 (named "prune_low_magnitude_dense_9" in the current model) was found to correspond to layer dense in the save file.
但是,新层prune\u low\u magnity\u density\u 9需要5个权重,但保存的权重有2个元素

怎么了

谢谢