我使用tensorflow和keras 2.8.0版本。
我有以下网络:
#defining model
model=Sequential()
#adding convolution layer
model.add(Conv2D(256,(3,3),activation='relu',input_shape=(256,256,3)))
#adding pooling layer
model.add(MaxPool2D(2,2))
#adding fully connected layer
model.add(Flatten())
model.add(Dense(100,activation='relu'))
#adding output layer
model.add(Dense(len(classes),activation='softmax'))
#compiling the model
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
#fitting the model
model.fit(x_tr,y_tr,epochs=epochs, )
# Alla 12-esima epoca, va a converge a 1
# batch size è 125 credo, non so il motivo
#evaluting the model
loss_value, accuracy = model.evaluate(x_te, y_te)
#loss_value, accuracy, top_k_accuracy = model.evaluate(x_te, y_te, batch_size=batch_size)
print("loss_value: " + str(loss_value))
print("acuracy: " + str(accuracy))
#predict first 4 images in the test set
ypred = model.predict(x_te)
关键是,现在我正试图将模型保存为". 5"格式,但如果我训练100次或1次,我将得到一个4.61Gb的文件模型。
为什么这个文件那么大?我怎样才能缩小这个模型的尺寸?
一般原因: h5文件的大小仅基于模型的参数数量。
在构建模型后添加行model.summary()
,并查看模型通常具有的参数数量。
减小模型尺寸的步骤你有很多过滤器在你的转换层。因为我不知道你想用你的模型实现什么,我仍然建议你将过滤器的数量分开到不同的转换层,并在两者之间添加Pooling
层。它将按比例缩小图像,特别是减少Flatten
层的参数数量。关于Pooling
层的更多信息可以在这里找到。
经过5个月的经验,我发现,为了减小模型尺寸,提高准确率得分和降低损失值,需要做的步骤如下:
- 对标签进行分类,然后改变模型的损失函数
- 将[-1,1]范围内的数据归一化
- 使用密集层增加参数,然后模型的维度:有时甚至没有帮助。有更多的参数并不意味着有更高的准确性。为了找到解决方案,你必须多次尝试改变网络,使用不同的激活函数和优化器,如SGD或Adam。
- 为learning_rate、decay_rate、decay_values等选择合适的参数。这些参数给你一个更好或更差的结果。
- 使用batch_size = 32或64
- 使用函数一步一步地加载数据集,而不是在RAM中一次加载所有数据集,因为它使过程更慢,甚至不需要:如果你使用keras/tensorflow,那么你可以使用
tf.data.Dataset.from_tensor_slices((x, y)).batch(32 , drop_remainder=True)
当然,它应该用于训练,测试,验证
希望能有所帮助