• 前提安装pydot and graphviz

    • pydot的安装:pip install pydot
    • graphviz的安装:graphviz需要在官网安装,安装后需要添加环境变量,程序所在目录的bin文件夹加入系统变量(参考:Graphviz安装及简单使用)

程序

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from keras.optimizers import Adam
from keras.utils.vis_utils import plot_model
import matplotlib.pyplot as plt
# install pydot and graphviz
# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# (60000,28,28)->(60000,28,28,1)
x_train = x_train.reshape(-1,28,28,1)/255.0
x_test = x_test.reshape(-1,28,28,1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)# 定义顺序模型
model = Sequential()# 第一个卷积层
# input_shape 输入平面
# filters 卷积核/滤波器个数
# kernel_size 卷积窗口大小
# strides 步长
# padding padding方式 same/valid
# activation 激活函数
model.add(Convolution2D(input_shape = (28,28,1),filters = 32,kernel_size = 5,strides = 1,padding = 'same',activation = 'relu',name = 'conv1'
))
# 第一个池化层
model.add(MaxPooling2D(pool_size = 2,strides = 2,padding = 'same',name = 'pool1'
))
# 第二个卷积层
model.add(Convolution2D(64,5,strides=1,padding='same',activation = 'relu',name='conv2'))
# 第二个池化层
model.add(MaxPooling2D(2,2,'same',name='pool2'))
# 把第二个池化层的输出扁平化为1维
model.add(Flatten())
# 第一个全连接层
model.add(Dense(1024,activation = 'relu'))
# Dropout
model.add(Dropout(0.5))
# 第二个全连接层
model.add(Dense(10,activation='softmax'))# # 定义优化器
# adam = Adam(lr=1e-4)# # 定义优化器,loss function,训练过程中计算准确率
# model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])# # 训练模型
# model.fit(x_train,y_train,batch_size=64,epochs=1)# # 评估模型
# loss,accuracy = model.evaluate(x_test,y_test)# print('test loss',loss)
# print('test accuracy',accuracy)
#TB代表从上往下,LR表示从左往右
plot_model(model,to_file='model.png',show_shapes=True,show_layer_names='False',rankdir='TB')
plt.figure(figsize=(20,20))
img=plt.imread('model.png')
plt.imshow(img)
plt.axis('off')
plt.show()

可能在最后一步运行的时候报以下错误:FileNotFoundError: [WinError 2] “dot” not found in path.
该错误可以参考:https://blog.csdn.net/sinat_38653840/article/details/84776806

  • 当然,也可以通过model.summary()来简单的查看网络结构

参考:

视频: 覃秉丰老师的“Keras入门”:http://www.ai-xlab.com/course/32
博客参考:https://www.cnblogs.com/XUEYEYU/tag/keras%E5%AD%A6%E4%B9%A0/

8. keras - 绘制网络结构相关推荐

  1. DL之Keras:keras保存网络结构、网络拓扑图、网络模型(json、yaml、h5等)注意事项及代码实现

    DL之Keras:keras保存网络结构.网络拓扑图.网络模型(json.yaml.h5等)注意事项及代码实现 目录 keras保存网络结构.网络拓扑图.网络模型(json.yaml.h5等)注意事项 ...

  2. 使用keras绘制实时的loss与acc曲线

    废话不多说,直接上代码,代码有注释,不懂得评论问博主即可 # -*- coding: utf-8 -*- import keras from keras.models import Sequentia ...

  3. caffe基础(8):draw_net.py绘制网络结构

    1.安装pydot [plain] view plaincopy sudo apt-get install python-pydot 2.安装graphviz [plain] view plainco ...

  4. [Keras] 绘制训练过程中Acc和Loss曲线

    以Fashion MNIST数据集为例. # coding = utf-8 from tensorflow import keras import matplotlib.pyplot as plt# ...

  5. 推荐系统1--Deepfm学习笔记

    目录 1 keras实现Deepfm demo 2 deepctr模版 3 其他实现方式 ctr_Kera 模型 数据集 预处理 执行步骤 4何为focal loss 参考 1 keras实现Deep ...

  6. python 多分类模型优化_【Python与机器学习】:利用Keras进行多类分类

    多类分类问题本质上可以分解为多个二分类问题,而解决二分类问题的方法有很多.这里我们利用Keras机器学习框架中的ANN(artificial neural network)来解决多分类问题.这里我们采 ...

  7. keras学习笔记-bili莫烦

    一.keras的backend设置 有两种方式: 1.修改JSON配置文件 修改~/.keras/keras.json文件内容为: {"iamge_dim_ordering":&q ...

  8. python学习——绘制loss、acc学习曲线

    两种方式 1.直接画 # model.fit返回acc和loss的日志 hist=model.fit(train_data, train_label,batch_size=64,epochs=2,va ...

  9. 22 款神经网络的设计和可视化工具

    前言 深度学习领域,最常见的就是各种网络模型,那么在写论文或者文章,介绍网络模型的时候,最好的办法当然就是展示代码画图,今天介绍的 Github 项目,就是整理了 22 个设计和可视化网络结构的工具, ...

  10. 22 款设计和可视化神经网络的工具

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 143 篇文章,本文大约 3000 字,阅读大约需要 10 分钟 前言 ...

最新文章

  1. 比特币现金成为第二个最有价值的区块链
  2. Spring Cloud【Finchley】-13 Eureka Server HA高可用 2个/3个节点的搭建及服务注册调用
  3. 剑指offer之二叉搜索树的第K个节点
  4. opc服务器状态红叉,西门子S7-300与上位机通过OPC服务器的通讯设置分解.pdf
  5. 八月计算机考试试题,职称计算机考试题库和答案
  6. 谈谈Virtual DOM
  7. JavaScript:说看懂了就懂了闭包,看懂了,还是不懂...
  8. 使用jQuery回到顶部
  9. Selenium测试指南
  10. Visual Studio 2019 集成CefSharp
  11. 非谓语动词作后置定语
  12. linux中shell的小括号、大括号的用法区别
  13. 张艾迪(创始人):解码互联网天才
  14. 一个技术总监的个人综合评估,希望对大家能有所帮助(转)
  15. 20个必不可少的Python库也是基本的第三方库
  16. 同步和异步的区别和优缺点
  17. LFS : 制作分区和挂载分区
  18. 【翻译】利用加速度求解位置的算法——三轴传感器
  19. JavaExp10:多线程设计,彩票购票问题
  20. Jenkins部署Git项目

热门文章

  1. 到底应该使用count(*) 还是count(1)
  2. Spring Data JPA
  3. 第二阶段—个人工作总结02
  4. 【Java与智能设备】4_1 Activity的创建和跳转
  5. c# html正则,c# 使用正则解析html
  6. python抓取网站内容_python抓取网站内容详细
  7. arduino 蓝牙示例_Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
  8. 如何用c++画图_看 FILA 与白山如何用经典黑白演奏不一样的C大调!
  9. linux部署rabbit mq,Linux安装rabbitmq遇到的问题
  10. 地脚螺钉直径系列_干数控这么久,现在才分清楚螺栓、螺钉、螺柱的区别