zoukankan      html  css  js  c++  java
  • DL_WITH_PY系统学习(第2章)

    本节提示:
    1、第一个dl例子;
    2、tensor和tensor操作;
    3、DL如何通过逆向传播和梯度下降达到学习目的。

    2.1 输入数据集的格式
    from keras.datasets import mnist
    (train_images,train_labels),(test_images,test_labels) = mnist.load_data()

    print('train_image_shape',train_images.shape)
    print('train_labels_len',len(train_labels))
    print('train_labels',train_labels)


    train_image_shape (60000, 28, 28)
    train_labels_len 60000
    train_labels [5 0 4 ... 5 6 8]
    2.2训练网络结构
    network = models.Sequential()
    network.add(layers.Dense(512,activation = 'relu',input_shape = (28*28,)))
    network.add(layers.Dense(10,activation='softmax'))
    layers(层)是训练网络的最基本组成部分,它读入数据,输出对于结果来说更有用的结果。
    我们这里建立的层是全连接层,注意这里的input_shape用了(28*28,)这种表示方式。最后输出的结果是10选1的结果。

    2.3编译模型
    network.compile(optimizer='rmaprop',loss='categorical_crossentropy',metrics=['accuracy'])

    下一步,为了让DL能够开始训练,我们还需要额外的3个构建:
    一个损失函数(a loss function)—用于计算系统训练的准确效果;
    一个优化函数(an optimizer)—用于定义优化方法;
    在训练的时候的度量—一般都是acc。

    2.4处理数据集
    在之前的读入的数据中,图片保存在类似(60000,28,28)这样的结构中,不方便处理,这里进行转换
    train_images = train_images.reshape((60000,28*28))
    train_images = train_images.astype('float32')/255

    test_images = test_images.reshape((10000,28*28))
    test_images = test_images.astype('float32')/255
    一方面是reshape,另一方面是转换成float32结构。这两个都是非常常见的操作。

    2.5进行one_hot处理
    from keras.utils import to_categorical
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    变成这样:

    2.6 现在就尝试训练

    network.fit(train_images,train_labels,epochs=5,batch_size=128)

    回顾一下这里输入模型的数据

    rain_images 是数量*(长*宽)

    train_labes 是onehot格式。这两个部分首先要清楚。

    并且进行最后的验证

    test_loss,test_acc = network.evaluate(test_images,test_labels)
     
    注意,即使是这里的这些非常简单的函数和数据,如果没有GPU的支持,也可能是需要较长时间才能够运行的。

    2.7 什么是tensor
    经常看见的tensor这个词,所谓tensor,就是数据的容器(a container for data)
    比如
    np.array(12)就是一个0D tensor
    np.array([12,3,6,14])一个列表,就是一个1D tensor
    np.array([12,3,6,14],
                 [6,79,35,1],
                 [7,80,4,36,2] )
    一个列表的组合,就是一个2D tensor
    再往上堆,就是3D tensor,也是比较好理解的

    2.8  tensor的组成
    主要包括3个部分
    维度(rank)比如3D tensor显而易见就是3d的                     对应ndim
    形状(shape)也就是具体填充tensor里面的具体内容       对于shape
    种类(data type) float32 或者 float64之类                        对于dtype

    具体打印一个数据
    import matplotlib.pyplot as plt
    digit = train_images[3]
    plt.imshow(digit,cmap=plt.cm.binary)
    plt.show()
    这里这个两次show令人印象深刻。

    2.9实际情况下的图像存储
    一套256*256的128 gray的图片集可以保存在(128,256,256,1)的4d tensor中;而一套同样大小的彩色图像可以保持在(128,256,256,3)的tensor中。
    如果是video data,往往必须是5维数据。





    附件列表

    • 相关阅读:
      DirectX编译环境配置
      [转]unresolved external symbol __imp__PlaySoundA@12的解决方法
      Win7/Win8/Win10显示桌面按钮
      Win8中更改账户信息
      3D游戏图形引擎
      【整理】鼠标位置编码(Mouse Position Code)和鼠标激活返回值(MOUSEACTIVATE Return Codes)
      精简ICO图标可减小EXE程序文件大小
      【整理】SYSCOMMAND的wParam值的宏定义
      迅雷网速测试器 下载速率测试记录
      【整理】窗体消息(Window Messages) 的宏定义
    • 原文地址:https://www.cnblogs.com/jsxyhelu/p/9090667.html
    Copyright © 2011-2022 走看看