zoukankan      html  css  js  c++  java
  • ML——keras

    keras官网:https://keras.io/api/models/

    参考:https://www.cnblogs.com/zb-ml/p/12704637.html

       http://www.manongjc.com/article/92196.html

    创建keras 模型有三种方法:Sequential model、Functional API、Model subclassing  (初学者常用Sequential model)

    There are three ways to create Keras models:

    • The Sequential model, which is very straightforward (a simple list of layers), but is limited to single-input, single-output stacks of layers (as the name gives away).
    • The Functional API, which is an easy-to-use, fully-featured API that supports arbitrary model architectures. For most people and most use cases, this is what you should be using. This is the Keras "industry strength" model.
    • Model subclassing, where you implement everything from scratch on your own. Use this if you have complex, out-of-the-box research use cases.

    1、下载mnist数据集   

    load_data function

    tf.keras.datasets.mnist.load_data(path="mnist.npz")

    returns(返回)

    Tuple of Numpy arrays: (x_train, y_train), (x_test, y_test).  以元组的形式返回

    x_train, x_test: uint8 arrays of grayscale image data with shapes (num_samples, 28, 28).

    y_train, y_test: uint8 arrays of digit labels (integers in range 0-9) with shapes (num_samples,).

    np_utils.to_categorical用于将标签转化为形如(nb_samples, nb_classes)的二值序列。

    比如:

    y_train = np_utils.to_categorical(y_train,10)
    假设num_classes = 10。
    如将[1,2,3,……4]转化成:
    [[0,1,0,0,0,0,0,0]
    [0,0,1,0,0,0,0,0]
    [0,0,0,1,0,0,0,0]
    ……
    [0,0,0,0,1,0,0,0]]
    这样的形态。

    Conv2D函数的用法:

    tf.keras.layers.Conv2D(
        filters,
        kernel_size,
        strides=(1, 1),
        padding="valid",
        data_format=None,
        dilation_rate=(1, 1),
        activation=None,
        use_bias=True,
        kernel_initializer="glorot_uniform",
        bias_initializer="zeros",
        kernel_regularizer=None,
        bias_regularizer=None,
        activity_regularizer=None,
        kernel_constraint=None,
        bias_constraint=None,
        **kwargs
    )

    padding(填充 0):有“valid”“same”

    • 首先考虑VALID,这个意思就是说,程序按照指定的滤波器和步长进行滑动卷积,当出现剩余的像素值不够滤波器进行一次卷积时,就舍弃剩余所有像素。如下图所示:

    如图所示输入像是1*10*10*1,filter大小是3*3*1*1,步长strides=[1,3,3,1],根据公式(10-3)/3=3,所以最终图像大小是3*3*1,操作中去掉了最右边和最下边一行像素,因为它不够3*3滤波器进行一次卷积。

    总结:padding为VALID模式时,很简单粗暴直接从原始图像的首段开始卷积,到最后不能匹配卷积核的部分直接舍去。

    • 当padding=SAME时,处理方式与VALID有所不同,对于一个维度不够像素时,会进行填充0处理。至于如何填充,有两种情况。

    情况一:相差偶数个元素时,比如一个10*10的图像使用3*3滤波器,以步长为3进行卷积,到了最后还剩1行(列)元素,也就是说还差2行元素,系统默认在整个图像的前后(左右)填充0;如果相差4个元素,就前后各加2个元素。已达到平均的目的。

    最终输出4*4大小的图像(根据公式(10-3+2*2)/3+1=4)。

    情况二:相差奇数个元素,比如一个11*11的图像使用3*3滤波器,以步长为3进行卷积,到了最后还剩2行(列)元素,也就是说还差1行元素,系统会在整个图像的前面(左边)填充0;如果相差3个元素,就前面加2个0元素,后面加1个0元素。

    (输入图像是11*11,还相差1个元素,加在维度的前面(第一行,第一列),最终得到的还是4*4大小的图像。根据公式(10-3+2*1)/3+1=4)

    总结:当padding为SAME时,系统会对图形进行填充0处理,不会舍弃任何一个元素。当相差偶数个元素时,在图像每一维的前面和后边添加各一般的0填充;当相差奇数个元素时,总是保持前面比后面多填充一个0元素

    后续补充。。。。。

  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/cfancy/p/13020736.html
Copyright © 2011-2022 走看看