当前位置: 首页 > 科技观察

可视化深度学习模型架构的六种常用方法总结

时间:2023-03-22 12:40:52 科技观察

可视化有助于解释和理解深度学习模型的内部结构。通过模型计算图的可视化,可以搞清楚神经网络是如何计算的。模型的可视化主要包括以下几个方面:模型有多少层,不同输入输出形状的层是如何连接的?参数使用不同的激活函数。在本文中,我们将使用Keras和PyTorch构建一个简单的深度学习模型,然后使用不同的工具和技术来可视化其架构。使用Keras构建模型importkeras#在FashionMNIST数据集(train_images,train_labels)上训练模型,_=keras.datasets.fashion_mnist.load_data()train_images=train_images/255.0#定义model.model=keras.models.Sequential([keras.layers.Flatten(input_shape=(28,28)),keras.layers.Dense(32,activation='relu'),keras.layers.Dropout(0.2),keras.layers.Dense(10,激活='softmax')])#编译模型model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])Keras内置可视化模型Keras中展示模型架构最简单的方法就是使用summary()方法model.summary()是keras内置的实现,原理很简单。就是遍历模型的所有层,打印相关细节,比如层的输入输出维度,参数个数,激活类型等,我们也可以用fortraining遍历来实现,代码如下:forlayerinmodel.layers:print("图层名称:"+layer.name)print("图层类型:"+layer.__class__.__name__)print("输入维度:{}".format(layer.input_shape[1:]))print("Outputdimension:{}".format(layer.output_shape[1:]))print("ParameterCount:{}".format(layer.count_params()))try:print("Activation:"+layer.activation.__name__)print("")except:print("")这个方法只能提供一些简单的信息,下面我们会介绍一些更有用的方法。Kerasvis_utilskeras.utils.vis_utils提供了使用Graphviz绘制Keras模型的实用函数。但是在使用之前,还需要安装一些其他的依赖:pipinstallpydotpipinstallpydotpluspipinstallgraphviz要使用Graphviz,还需要将Graphvizbin文件夹的路径添加到系统PATH中,设置model_img_file=后即可使用'model.png'tf.keras.utils.plot_model(model,to_file=model_img_file,show_shapes=True,show_layer_activations=True,show_dtype=True,show_layer_names=True)VisualkearsVisualkears库只支持CNN(卷积神经网络)分层式架构生成和大多数模型图式架构,包括普通的前馈网络。pipinstallvisualkeraslayeredview()用于查看CNN模型架构visualkeras.layered_view(model,legend=True,draw_volume=True)GraphsofTensorBoardTensorBoard可以查看模型结构图。对于Tensorboard,使用以下方法。importtensorflowastffromdatetimeimportdatetimeimporttensorboard如果需要在notebook中使用,可以使用如下语句加载TensorboardExtension%load_exttensorboardKerasTensorboardCallbackusedinfit()#定义KerasTensorBoardcallback.logdir="logs/fit/"+datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback=keras.callbacks.TensorBoard(log_dir=logdir)#训练模型.model.fit(train_images,train_labels,batch_size=64,epochs=5,callbacks=[tensorboard_callback])model.save("model.h5")模型训练完成后,启动TensorBoard,等待UI加载。%tensorboard--logdirlogs点击“Graphs”可以看到模型的可视化结果。注:Pytorch1.8之后,提供了fromtorch.utils.tensorboardimportSummaryWriter,也可以生成tensorboard数据,与tensorboard连接。NetronNetron是专门为神经网络、深度学习和机器学习模型设计的查看器。支持Keras、TensorFlowlite、ONNX、Caffe,对PyTorch、TensorFlow有实验性支持。pipinstallnetronbrowser进入netron.app,点击“OpenModel”,选择要上传的h5文件路径。可以看到每一层的可视化结果。在PyTorch中构建一个简单的深度学习模型importtorchfromtorchimportnn#获取用于训练的cpu或gpu设备。device="cuda"iftorch.cuda.is_available()else"cpu"print(f"Using{device}device")classNeuralNetwork(nn.Module):def__init__(self):super(NeuralNetwork,self).__init__()self.flatten=nn.Flatten()self.linear_relu_stack=nn.Sequential(nn.Linear(28*28,512),nn.ReLU(),nn.Linear(512,512),nn.ReLU(),nn.Linear(512,10),)defforward(self,x):x=self.flatten(x)logits=self.linear_relu_stack(x)returnlogitspytorch_model=NeuralNetwork().to(device)x=torch.randn(512,28,28,1).requires_grad_(True)y=pytorch_model(x)最直接的看法modelarchitecture方式是打印出来。print(pytorch_model)虽然可以看到完整的模型架构,但是效果不如Keras自带的函数。这是一个非常有用的库来解决这个问题。PyTorchVizPyTorchViz依赖graphviz,所以还需要安装:pipinstallgraphvizpipinstalltorchviz使用PyTorchViz可视化模型非常简单,只需要一个方法:fromtorchvizimportmake_dotmake_dot(y,params=dict(list(pytorch_model.named_pa??rameters()))).render("torchviz",format="png")上面的代码生成一个torchviz.png文件,如下图。总结视觉模型架构可以更好的解释深度学习模型。模型结构可视化显示层数、每层数据的输入和输出形状、使用的激活函数以及每层的参数数量,为优化模型提供更好的理解。