zoukankan      html  css  js  c++  java
  • (七) Keras 绘制网络结构和cpu,gpu切换

    视频学习来源

    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('
    test loss',loss)
    #print('
    test accuracy',accuracy)
    #
    #loss,accuracy=model.evaluate(x_train,y_train)
    #
    #print('
    train loss',loss)
    #print('
    train 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()


    index

  • 相关阅读:
    迭代器基础知识
    C语言I博客作业09
    第一周作业
    C语言1博客作业04
    C语言I博客作业08
    C语言博客作业05
    C语言I作业12—学期总结
    C语言I博客作业10
    C语言I博客作业06
    C语言I博客作业11
  • 原文地址:https://www.cnblogs.com/XUEYEYU/p/keras-learning-7.html
Copyright © 2011-2022 走看看