zoukankan      html  css  js  c++  java
  • 吴恩达深度学习 第四课第二周编程作业_Keras tutorial

    Keras tutorial - the Happy House

    参考:https://blog.csdn.net/u013733326/article/details/80250818

    ##决定不是全部翻译或者照搬了,把每周有价值的东西记录。

    欢迎来到第二周的第一个作业。在这个作业中,你将:

    学习使用Keras,这是一种高级的神经网络API(编程框架),用Python编写,能够运行在几个底层框架之上,包括TensorFlow和CNTK。
    看看你如何在几个小时内构建一个深度学习算法
    我们为什么要使用Keras?开发Keras是为了让深度学习工程师能够非常快速地构建和试验不同的模型。正如TensorFlow是一个比Python更高级别的框架,Keras是一个更高级别的框架,它提供了额外的抽象方法。能够以最小的延迟从想法到结果是找到好的模型的关键。然而,Keras比底层框架具有更多的限制性,因此有些非常复杂的模型可以在TensorFlow中实现,但在Keras中却不能(不太困难)实现。也就是说,Keras可以很好地用于许多常见的模型。

    在这个练习中,您将处理“快乐之家”问题,我们将在下面解释。让我们装载所需的包来解决快乐之家的问题吧!

     1 import numpy as np
     2 from keras import layers
     3 from keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D
     4 from keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalMaxPooling2D, GlobalAveragePooling2D
     5 from keras.models import Model
     6 from keras.preprocessing import image
     7 from keras.utils import layer_utils
     8 from keras.utils.data_utils import get_file
     9 from keras.applications.imagenet_utils import preprocess_input
    10 import pydot
    11 from IPython.display import SVG
    12 from keras.utils.vis_utils import model_to_dot
    13 from keras.utils import plot_model
    14 from kt_utils import *
    15 import os
      os.environ['KERAS_BACKEND']='tensorflow'
    16 import keras.backend as K 17 K.set_image_data_format('channels_last') 18 import matplotlib.pyplot as plt 19 from matplotlib.pyplot import imshow 20 21 %matplotlib inline

    注意:如您所见,我们已经从Keras导入了很多函数。你可以通过直接在笔记本中调用它们来轻松地使用它们。例如:X = Input(…)或X = ZeroPadding2D(…)。

    运行后出现问题:

    Warning! ***HDF5 library version mismatched error***
    The HDF5 header files used to compile this application do not match
    the version used by the HDF5 library to which this application is linked.
    Data corruption or segmentation faults may occur if the application continues.
    This can happen when an application was compiled by one version of HDF5 but
    linked with a different version of static or shared HDF5 library.
    You should recompile the application or check your shared library related
    settings such as 'LD_LIBRARY_PATH'.
    You can, at your own risk, disable this warning by setting the environment
    variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
    Setting it to 2 or higher will suppress the warning messages totally.
    Headers are 1.10.4, library is 1.10.5
    
    
    ---
                       HDF5 Version: 1.10.5
                      Configured on: 2019-03-04
                      Configured by: Visual Studio 15 2017 Win64
                        Host system: Windows-10.0.17763
                  Uname information: Windows
                           Byte sex: little-endian
                 Installation point: C:/Program Files/HDF5

    参考:更新anacaonda后,HDF5 header version与HDF5 library不匹配问题的解决

    解决引入keras后出现的Using TensorFlow backend的错误

    1 - The Happy House

      下一次放假的时候,你决定和你的五个朋友一起度过一个星期。这是一个非常好的房子,在附近有很多事情要做,但最重要的好处是每个人在家里都会感到快乐,所以任何想进入房子的人都必须证明他们目前的幸福状态。

     2 - Building a model in Keras

    Keras非常适合快速制作模型,它可以在很短的时间内建立一个很优秀的模型,举个例子:

    def model(input_shape):
        """
        模型大纲
        """
        #定义一个tensor的placeholder,维度为input_shape
        X_input = Input(input_shape)
        
        #使用0填充:X_input的周围填充0
        X = ZeroPadding2D((3,3))(X_input)
        
        # 对X使用 CONV -> BN -> RELU 块
        X = Conv2D(32, (7, 7), strides = (1, 1), name = 'conv0')(X)
        X = BatchNormalization(axis = 3, name = 'bn0')(X)
        X = Activation('relu')(X)
        
        #最大值池化层
        X = MaxPooling2D((2,2),name="max_pool")(X)
        
        #降维,矩阵转化为向量 + 全连接层
        X = Flatten()(X)
        X = Dense(1, activation='sigmoid', name='fc')(X)
        
        #创建模型,讲话创建一个模型的实体,我们可以用它来训练、测试。
        model = Model(inputs = X_input, outputs = X, name='HappyModel')
        
        return model
        

    这里的MaxPooling2D是什么意思?

    请注意:Keras框架使用的变量名和我们以前使用的numpy和TensorFlow变量不一样。它不是在前向传播的每一步上创建新变量(比如X, Z1, A1, Z2, A2,…)以便于不同层之间的计算。在Keras中,我们使用X覆盖了所有的值,没有保存每一层结果,我们只需要最新的值,唯一例外的就是X_input,我们将它分离出来是因为它是输入的数据,我们要在最后的创建模型那一步中用到。

     1 def HappyModel(input_shape):
     2     """
     3     实现一个检测笑容的模型
     4     
     5     参数:
     6         input_shape - 输入的数据的维度
     7     返回:
     8         model - 创建的Keras的模型
     9         
    10     """
    11     
    12     #你可以参考和上面的大纲
    13     X_input = Input(input_shape)
    14 
    15     #使用0填充:X_input的周围填充0
    16     X = ZeroPadding2D((3, 3))(X_input)
    17 
    18     #对X使用 CONV -> BN -> RELU 块
    19     X = Conv2D(32, (7, 7), strides=(1, 1), name='conv0')(X)
    20     X = BatchNormalization(axis=3, name='bn0')(X)
    21     X = Activation('relu')(X)
    22 
    23     #最大值池化层
    24     X = MaxPooling2D((2, 2), name='max_pool')(X)
    25 
    26     #降维,矩阵转化为向量 + 全连接层
    27     X = Flatten()(X)
    28     X = Dense(1, activation='sigmoid', name='fc')(X)
    29 
    30     #创建模型,讲话创建一个模型的实体,我们可以用它来训练、测试。
    31     model = Model(inputs=X_input, outputs=X, name='HappyModel')
    32 
    33     return model
    def HappyModel(input_shape):

    现在我们已经设计好了我们的模型了,要训练并测试模型我们需要这么做:

    1. 创建一个模型实体。
    2. 编译模型,可以使用这个语句:model.compile(optimizer = "...", loss = "...", metrics = ["accuracy"])
    3. 训练模型:model.fit(x = ..., y = ..., epochs = ..., batch_size = ...)
    4. 评估模型:model.evaluate(x = ..., y = ...)

    如果你想要获取关于model.compile(), model.fit(), model.evaluate()的更多的信息,你可以参考这里

    #创建一个模型实体
    happy_model = HappyModel(X_train.shape[1:])
    #编译模型
    happy_model.compile("adam","binary_crossentropy", metrics=['accuracy'])
    #训练模型
    #请注意,此操作会花费你大约6-10分钟。
    happy_model.fit(X_train, Y_train, epochs=40, batch_size=50)
    #评估模型
    preds = happy_model.evaluate(X_test, Y_test, batch_size=32, verbose=1, sample_weight=None)
    print ("误差值 = " + str(preds[0]))
    print ("准确度 = " + str(preds[1]))

    执行结果:

    Epoch 1/40
    600/600 [==============================] - 12s 19ms/step - loss: 2.2593 - acc: 0.5667
    Epoch 2/40
    600/600 [==============================] - 9s 16ms/step - loss: 0.5355 - acc: 0.7917
    Epoch 3/40
    600/600 [==============================] - 10s 17ms/step - loss: 0.3252 - acc: 0.8650
    Epoch 4/40
    600/600 [==============================] - 10s 17ms/step - loss: 0.2038 - acc: 0.9250
    Epoch 5/40
    600/600 [==============================] - 10s 16ms/step - loss: 0.1664 - acc: 0.9333
    
    ...
    
    Epoch 38/40
    600/600 [==============================] - 10s 17ms/step - loss: 0.0173 - acc: 0.9950
    Epoch 39/40
    600/600 [==============================] - 14s 23ms/step - loss: 0.0365 - acc: 0.9883
    Epoch 40/40
    600/600 [==============================] - 12s 19ms/step - loss: 0.0291 - acc: 0.9900
    150/150 [==============================] - 3s 21ms/step
    误差值 = 0.407454126676
    准确度 = 0.840000001589

    3 - Conclusion

    这个任务算是完成了,你可以在你家试试[手动滑稽]

    4 - Test with your own image (Optional)

    ### START CODE HERE ###
    img_path = 'images/my_image.jpg'
    ### END CODE HERE ###
    img = image.load_img(img_path, target_size=(64, 64))
    imshow(img)
    
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    
    print(happyModel.predict(x))

    行结果:

    5 - Other useful functions in Keras (Optional)

    • model.summary():打印出你的每一层的大小细节
    • plot_model() : 绘制出布局图
    happy_model.summary()

    plot_model(happyModel, to_file='HappyModel.png')
    SVG(model_to_dot(happyModel).create(prog='dot', format='svg'))

    坑:本人未出现,可能因为其他任务装过pydot啥的

    1. 请下载并安装Graphviz的windows版本,然后写入环境变量,博主的环境变量填的是:E:Anaconda3Libsite-packagesGraphvizin,因人而异吧.
    2. 请安装pydot-ng & graphviz,其代码CMD代码为:pip install pydot-ng & pip install graphviz或者是pip install pydotpip install graphviz
    3. 重启Jupyter Notebook 【手动微笑】【手动再见】

     

     

    作者:Agiroy_70

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。

    博主的文章主要是记录一些学习笔记、作业等。文章来源也已表明,由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。

    博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!

  • 相关阅读:
    leetcode 116,117,129,145,199,230,337
    leetcode 897,JZ68,JZ17,95,96,105,113,114
    leetcode 404,530,543,563,572,589,617,637,700
    leetcode 397,784,898,100,101,104,108,110,111,112,226,235,257
    leetcode 78,137,187,260,393
    leetcode 169,190,191,665,342,476,1290
    leetcode 44,56,179,274,853,948
    leetcode 55,134,376,406,435,452,621
    leetcode 122,392,455,605,860,874,1005
    leetcode (堆->hard) 23,218,239,295,407,786
  • 原文地址:https://www.cnblogs.com/hale547/p/13655775.html
Copyright © 2011-2022 走看看