吴恩达深度学习 第四课第二周编程作业_Keras tutorial - the Happy House
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
现在我们已经设计好了我们的模型了,要训练并测试模型我们需要这么做:
- 创建一个模型实体。
- 编译模型,可以使用这个语句:
model.compile(optimizer = "...", loss = "...", metrics = ["accuracy"])
。 - 训练模型:
model.fit(x = ..., y = ..., epochs = ..., batch_size = ...)
。 - 评估模型:
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啥的
- 请下载并安装Graphviz的windows版本,然后写入环境变量,博主的环境变量填的是:
E:\Anaconda3\Lib\site-packages\Graphviz\bin
,因人而异吧. - 请安装pydot-ng & graphviz,其代码CMD代码为:
pip install pydot-ng & pip install graphviz
或者是pip install pydot
与pip install graphviz
- 重启Jupyter Notebook 【手动微笑】【手动再见】
作者:Agiroy_70
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章主要是记录一些学习笔记、作业等。文章来源也已表明,由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!