视频学习来源

https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553

笔记

首先安装pydot

conda install pydot

会自动安装graphviz

如果出现TypeError: softmax() got an unexpected keyword argument 'axis' 错误,可降级keras或者用本文代码标黄的部分解决

切换cpu和gpu运算

https://www.cnblogs.com/jins-note/p/9756050.html

conda安装keras-gpu (conda会自动查询依赖安装需要的相关包,如TensorFlow)

(如果环境出现问题,用conda移除相关包,重新安装keras-gpu即可)

在导入keras前,插入代码

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
# The GPU id to use, usually either "0" or "1"
os.environ["CUDA_VISIBLE_DEVICES"] = "0" #使用gpu
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"  #为使用CPU

import numpy as np
from keras.datasets import mnist #将会从网络下载mnist数据集
from keras.utils import np_utils
from keras.models import Sequential #序列模型
#Convolution2D 是2维卷积
#MaxPooling2D 是2维最大池化
#Flatten 数据扁平化(降维)
from keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten #在这里导入dropout
from keras.optimizers import Adam
from keras.utils.vis_utils import plot_model
import matplotlib.pyplot as plt
import tensorflow as tf
#需要安装pydot和graphviz
#graphviz需要在官网安装,安装后需要添加环境变量,程序所在目录的bin文件夹加入系统变量
#载入数据
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#查看格式
#(60000,28,28)
print('x_shape:',x_train.shape)
#(60000)
print('y_shape:',y_train.shape) #转化为4维
#最后一个维度图片深度,1表示黑白,3表示彩色
#rgb是红绿蓝三通道0-255表示各个通道的颜色深度
#(60000,28,28)->(60000,28,28,1)
#-1表示自动设置
#除以255是做数据归一化处理
x_train=x_train.reshape(-1,28,28,1)/255.0 #转换数据格式
x_test=x_test.reshape(-1,28,28,1)/255.0 #转换数据格式
#label标签转换成 one hot 形式
y_train=np_utils.to_categorical(y_train,num_classes=10) #分成10类
y_test=np_utils.to_categorical(y_test,num_classes=10) #分成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'
)) #平面大小28x28,用same padding得到的和上一次一样,也是28x28,有32个特征图
#池化后变成14x14,32个特征图 #第一个池化层
model.add(MaxPooling2D(
pool_size=2, # 池化窗口大小 2x2的窗口
strides=2,
padding='same'
)) #第二个卷积层
#filters=64 kernel_seize=5
model.add(Convolution2D(64,5,strides=1,padding='same',activation='relu')) #第二个卷积层后64个特征图,14x14
#第二个池化层后64个特征图,7x7 #第二个池化层
model.add(MaxPooling2D(2,2,'same')) #把第二个池化层的输出扁平化为1维
#长度 64x7x7
model.add(Flatten()) #第一个全连接层
#1024个神经元
model.add(Dense(1024,activation='relu')) #Dropout
#训练时百分之40个神经元不工作
model.add(Dropout(0.4)) #第二个全连接层
model.add(Dense(10,activation=(tf.nn.softmax))) ##定义优化器
##学习速率为10的负4次方
#adam=Adam(lr=1e-4)
#
#
##定义优化器,损失函数,训练效果中计算准确率
#model.compile(
# optimizer=adam, #sgd优化器
# loss='categorical_crossentropy', #损失用交叉熵,速度会更快
# metrics=['accuracy'], #计算准确率
#)
#
##训练
##六万张,每次训练64张,训练10个周期(六万张全部训练完算一个周期)
#model.fit(x_train,y_train,batch_size=64,epochs=10)
#
##评估模型
#loss,accuracy=model.evaluate(x_test,y_test)
#
#print('\ntest loss',loss)
#print('\ntest accuracy',accuracy)
#
#loss,accuracy=model.evaluate(x_train,y_train)
#
#print('\ntrain loss',loss)
#print('\ntrain 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()

(七) Keras 绘制网络结构和cpu,gpu切换的更多相关文章

  1. Cpu Gpu 内存 显存 数据流

    [精]从CPU架构和技术的演变看GPU未来发展 http://www.pcpop.com/doc/0/521/521832_all.shtml 显存与纹理内存详解 http://blog.csdn.n ...

  2. Raspberry Pi B+ 定时向物联网yeelink上传CPU GPU温度

     Raspberry Pi B+ 定时向物联网yeelink上传CPU GPU温度 硬件平台: Raspberry Pi B+ 软件平台: Raspberry 系统与前期安装请参见:树莓派(Ros ...

  3. 舌尖上的硬件:CPU/GPU芯片制造解析(高清)(组图)

    一沙一世界,一树一菩提,我们这个世界的深邃全部蕴藏于一个个普通的平凡当中.小小的厨房所容纳的不仅仅是人们对味道的情感,更有推动整个世界前进的动力.要想理解我们的世界,有的时候只需要细细品味一下我们所喜 ...

  4. [转帖]双剑合璧:CPU+GPU异构计算完全解析

    引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...

  5. cpu gpu数据同步

    https://developer.apple.com/documentation/metal/advanced_command_setup/cpu_and_gpu_synchronization d ...

  6. CPU/GPU/TPU/NPU...XPU都是什么意思?

    CPU/GPU/TPU/NPU...XPU都是什么意思? 现在这年代,技术日新月异,物联网.人工智能.深度学习等概念遍地开花,各类芯片名词GPU, TPU, NPU,DPU层出不穷......都是什么 ...

  7. keras & tensorflow 列出可用GPU 和 切换CPU & GPU

    列出可用GPU from tensorflow.python.client import device_lib print(device_lib.list_local_devices()) from ...

  8. CPU GPU设计工作原理《转》

    我知道这非常长,可是,我坚持看完了.希望有幸看到这文章并对图形方面有兴趣的朋友,也能坚持看完.一定大有收获.毕竟知道它们究竟是怎么"私下勾搭"的.会有利于我们用程序来指挥它们... ...

  9. three.js粒子效果(分别基于CPU&GPU实现)

    前段时间做了一个基于CPU和GPU对比的粒子效果丢在学习WebGL的群里,技术上没有多作讲解,有同学反馈看不太懂GPU版本,干脆开一篇文章,重点讲解基于GPU开发的版本. 一.概况 废话不多说,先丢上 ...

随机推荐

  1. token:NLP之词形还原

    已迁移到我新博客,阅读体验更佳token:NLP之词形还原 完整代码实现放在我的github上:click me 一.任务描述 形态还原算法: 输入一个单词 如果词典里有该词,输出该词及其属性,转4, ...

  2. Windows核心编程第二章,字符串的表示以及宽窄字符的转换

    目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 U ...

  3. netcore服务程序暴力退出导致的业务数据不一致的一种解决方案(优雅退出)

    一: 问题提出 现如今大家写的netcore程序大多部署在linux平台上,而且服务程序里面可能会做各种复杂的操作,涉及到多数据源(mysql,redis,kafka).成功部署成后台 进程之后,你以 ...

  4. visual studio code .net 开发

    Visual Studio确实是相当好用,各种简化操作什么的简直不要太舒服.但其容量太大,有时不是很方便,所以今天简单介绍一下另一个工具--Visual Studio Code. 虽然相比于老大哥Vi ...

  5. c#在pictureBox控件上绘制多个矩形框及删除绘制的矩形框

    在pictureBox上每次只绘制一个矩形框,绘制下一个矩形框时上次绘制的矩形框取消,代码如链接:https://www.cnblogs.com/luxiao/p/5625196.html 在绘制矩形 ...

  6. 笔记:Java虚拟机运行时数据区

    Java虚拟机在执行Java程序的过程中会把它管的内存划分为以下若干个不同的区域: 1.程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器:由于Java虚拟机的 ...

  7. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

  8. Android-----Intent中通过startActivity(Intent intent )显式启动新的Activity

    Intent:即意图,一般是用来启动新的Activity,按照启动方式分为两类:显式Intent 和 隐式Intent 显示Intent就是直接以“类名称”来指定要启动哪一个Activity:Inte ...

  9. MYSQL 主从复制,读写分离(8)

    Mysql 数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据文件,而是通过binlog日志复制到需要同步的服务器上. 一 主从复制的原理实现 原理图解说: 数据库更改 生成数据 ...

  10. ASP.NET Aries 高级开发教程:Excel导入之多表高级导入配置(中)

    前言: 在面对Excel的各种复杂导入情况中,多表导入是很常见的情景. 今天就来写一下多表导入是如何配置的. 1.自定义导入模板 怎么自定义: 其实就是自己新建一个Excel了,把列头都写好. 不过有 ...