python-2.7 - 将 model.summary() 编写为函数
问题描述
我有一个写成函数的模型,如下所示:
def __baseModel(self, nodes=300, lr=0.001):
_model = Sequential()
_model.add(Dense(nodes, input_dim=self.inputDim, kernel_initializer='he_normal', activation='relu'))
_model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
_optimizer = self.get_optimizer(learn_rate=lr, dcy=float(self.cfg['init_decay']), eps=float(self.cfg['init_epsilon']))
_model.compile(loss='binary_crossentropy', optimizer='Nadam', metrics=['accuracy'])
return _model
该函数位于一个名为classifier.py
. 我将在另一个名为的 python 文件中调用此函数,该文件demodel.py
具有模型上的训练/预测代码。最后,main.py
我想调用一个可以打印模型摘要的函数。我的问题是,我应该在哪个文件中编写一个打印出模型摘要的函数以及如何编写这样的函数?
解决方案
您可以为此使用面向对象的概念,然后您不必编写自己的model.summary
函数
基本上,您为keras模型使用单例设计模式/类,然后您可以从任何其他文件/模块/类访问此单例。
您仅在中创建此 Singleton 类的一个实例main.py
,在任何其他文件/模块中您仅访问您在其中创建的单个实例main.py
(因此 Singleton),通过此您可以从整个程序中访问相同的keras 模型:
模型单例.py
class ModelSingleton():
# Here will be the instance stored.
__instance = None
@staticmethod
def getInstance():
""" Static access method. """
if ModelSingleton.__instance == None:
ModelSingleton()
return ModelSingleton.__instance
def __init__(self):
self.model = self.baseModel()
""" Virtually private constructor. """
if ModelSingleton.__instance != None:
raise Exception("This class is a singleton!")
else:
ModelSingleton.__instance = self
def baseModel(self):
nodes=300
lr=0.001
model = Sequential()
model.add(Dense(nodes, input_dim=4, kernel_initializer='he_normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
#optimizer = self.get_optimizer(learn_rate=lr, dcy=float(self.cfg['init_decay']), eps=float(self.cfg['init_epsilon']))
model.compile(loss='binary_crossentropy', optimizer='Nadam', metrics=['accuracy'])
print('model generated')
return model
main.py (在这里您创建了 ModelSingleton 的单个实例,其中定义了您的 keras 模型)
import modelsingleton
import demodel
model_instance = modelsingleton.ModelSingleton()
model_instance.model.summary()
demodel.defineModel()
demodel.py(在这个你得到一个ModelSingleton create的实例main.py
)
import modelsingleton
def defineModel():
model_instance = modelsingleton.ModelSingleton.getInstance()
model_instance.baseModel()
print('summary demodel')
model_instance.model.summary()
上面的代码简单地打印了两个模型摘要,一个来自main.py
,另一个来自demodel.py
和调用baseModel()
来自demodel.py
(via defineModel()
in main.py
)
我修改了https://gist.github.com/pazdera/1098129中的代码,替代编写 Singleton
另一种方法是在https://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html
推荐阅读
- c# - 如何在 .NET CORE 2.2 中通过代码优先方法使用 linq2db 在 Microsoft SQL Server 中创建数据库
- php - Laravel api.php 中间件
- python-3.x - 多个版本的 Anaconda & Python 安装
- java - Firestore 按文档 ID 或文档字段搜索和排序,哪个更好?
- python - matplotlib 在 pyqt5 中如何使用 qt 设计器
- php - 计算范围之间的值
- mysql - MySQL:尝试根据 CASE 选择表,收到错误代码:1241 操作数应包含 1 列
- r - 使用 MatchIt 的粗化精确匹配返回错误
- go - 如何控制 gin 1.4.0+ 中缺少 URL 参数的行为?
- html - 如何在自定义 Django 模板标签中动态呈现 Vue.js 指令