• 基础中的基础!吴恩达deeplearning.ai:如何搭建一个神经网络


    在前面几篇博客的学习之后,你应该了解了如何写出Tensorflow有关的代码,如何在Tensorflow中搭建一个层以及如何在Tensorflow之中实现前向推理(链接),也了解了Tensorflow有关的数据形式(链接
    今天,我们要把这些内容放在一起,搭建一个真正的神经网络密集负载,其实就是用tensorflow的一些库函数简化了代码,同时会采用一种不同且更加简单的方式。


    之前的写法

    x = np.array([[200.0, 17.0]])
    layer_1 = Dense(units=3, activation='sigmoid')
    a_1 = layer_1(x)
    
    layer_2 = Dense(units=1, activation='sigmoid')
    a_2 = layer_2(a_1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    之前构建神经网络的做法是,先创建了特征向量,再分别构建隐藏层和最终输出层,然后一步一步前向传播最终得到预测值。这是一种显式的构建方式。

    新的写法

    事实上,Tensorflow有多种不同的方式来实现前向传播以及学习方式,让我来展示一种:
    和以前一样的是创建层:

    layer_1 = Dense(units=3, activation='sigmoid')
    layer_2 = Dense(units=1, activation='sigmoid')
    
    • 1
    • 2

    但现在不是手动获取数据并传入第一层,然后再手动传入第二层等等,相反,我们可以告诉Tensorflow,希望它采用第一层和第二层并且串在一起形成一个神经网络,写法为:

    model = Sequential([layer_1, layer_2])
    
    • 1

    简单点说,以上代码就是告诉Tensorflow,把这俩层按照顺序串联好。事实证明,使用Sequential框架可以做很多事情,假设你有这么一个咖啡的例子(不了解的可以看我上面的链接,以前提到过):
    在这里插入图片描述
    你可以将x存储为矩阵:

    x = np.array([[200, 17],
                  [120, 5],
                  [425, 20],
                  [212, 18]])
    
    • 1
    • 2
    • 3
    • 4

    你也可以将y存储为矩阵,采取的形式为一维数组:

    y = np.array([1001])
    
    • 1

    然后将以前的一大堆内容简化为了这三个库函数:

    model.compile(...)
    model.fit(x, y)
    model.predict(x_new)
    
    • 1
    • 2
    • 3

    如果你想运行这个神经网络,且你想调用一些参数,那么可以使用model.compile(以后详细讲)
    model.fit(x, y),它可以告诉Tensorflow按照顺序将第一层和第二层串联在一起搭建神经网络并进行拟合
    假设你有一组新的特征向量x_new,你可以用model.predict(x_new)来进行预测

    layer_1 = Dense(units=3, activation='sigmoid')
    layer_2 = Dense(units=1, activation='sigmoid')
    model = Sequential([layer_1, layer_2])
    
    • 1
    • 2
    • 3

    所有一般来说,以上三行显式的代码在定义完之后不用重复写了,因为可以使用:

    model.compile(...)
    model.fit(x, y)
    model.predict(x_new)
    
    • 1
    • 2
    • 3

    的形式来隐式表示,里面可以具体定义有几层,每层各多少神经元,用的什么激活函数之类的

    数字分类重写

    让我们也用以上方法重新写下以前博客写过的数字分类(可以在我的博客中找到)
    第一步定义下各层:

    layer_1 = Dense(units=25, activation='sigmoid')
    layer_2 = Dense(units=15, activation='sigmoid')
    layer_3 = Dense(units=1, activation='sigmoid')
    
    • 1
    • 2
    • 3

    第二步使用Squential把三层串联在一起:

    model = Sequential([layer_1, layer_2, layer_3])
    
    • 1

    第三步使用compile定义具体参数:

    model.compile(...)
    
    • 1

    第四步定义下数据集:

    x = np.array([[0.0...245,...240,...0]
                  [0.0...200,...184,...0]])
    y = np.array([1, 0]
    • 1
    • 2
    • 3

    第五步进行拟合:

    model.fit(x, y)
    
    • 1

    第六步进行预测:

    model.predict(x_new)
    
    • 1

    一二步代码可以用嵌套的形式,更加简接:

    model = Squential([
      Dense(units = 25, activation = 'sigmoid'),
      Dense(units = 15, activation = 'sigmoid'),
      Dense(units = 1, activation = 'sigmoid')
      ])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。

  • 相关阅读:
    中台和微服务有什么区别?
    Java面试题10-如何理解volatile关键字
    uniapp:动态修改页面标题
    操作系统(Operating System)知识点复习——第八章 虚拟内存
    MyBatisPlus
    阿里一面,说说你对Mysql死锁的理解
    【MFC】窗口消息与绘制(4)
    Makefile学习
    【使用typedef将复杂的block定义简化 Objective-C语言】
    storage和正则表达式
  • 原文地址:https://blog.csdn.net/m0_75077001/article/details/136253639