今天终于体会到了好电脑有多爽了,我看别人博客说这次作业的运算量比较大,我就放弃了用自己这台烂电脑的打算,改用实验室的电脑。

首先使用keras搭建一个CNN,熟悉下keras。感觉就是tensorflow的进阶版,具体的函数参数在这里都有:FAQ 常见问题解答 - Keras 中文文档

搭建CNN:

首先导包,导入数据

import os
import time
import keras as ks
import kt_utilsos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'  # 忽略警告
train_x, train_y, test_x, test_y, classes = kt_utils.load_dataset()
train_x = train_x/255
test_x = test_x/255
train_y = train_y.T
test_y = test_y.T
# print(train_x.shape, train_y.shape, test_x.shape, test_y.shape, classes.shape)
# plt.title(train_y[:,2])
# plt.imshow(train_x[2])
# plt.show()

搭建网络,比较简单:

def ks_model(x):x_input = ks.layers.Input(x.shape[1:])  # 导入数据 不包含数据数目列# 第一卷积层z1 = ks.layers.Conv2D(6, (5, 5), name="conv1")(x_input)z1_bn = ks.layers.BatchNormalization(name="bn1")(z1)  # 添加BN层a1 = ks.layers.Activation("relu")(z1_bn)a1_max = ks.layers.MaxPool2D((2, 2), strides=2, name='mp1')(a1)# 第二卷积层z2 = ks.layers.Conv2D(16, (5, 5), name="conv2")(a1_max)z2_bn = ks.layers.BatchNormalization(name="bn2")(z2)  # 添加BN层a2 = ks.layers.Activation("relu")(z2_bn)a2_max = ks.layers.MaxPool2D((2, 2), strides=2, name='mp2')(a2)a2_fc = ks.layers.Flatten()(a2_max)# 第三、四全连接层a3 = ks.layers.Dense(120, activation="relu", name="FC3")(a2_fc)a4 = ks.layers.Dense(84, activation="relu", name="FC4")(a3)# 第五层输出层a5 = ks.layers.Dense(1, activation="sigmoid", name="output")(a4)# 建模model = ks.Model(x_input, outputs=a5, name="ks_model")return model

运算数据,并评估模型:

train_model = ks_model(train_x)
train_model.compile(ks.optimizers.Adam(), loss="binary_crossentropy", metrics=["accuracy"])
time_start = time.time()
train_model.fit(train_x, train_y, 32, 50)
# binary_crossentropy sigmoid  categorical_crossentropy softmax
_, acc = train_model.evaluate(test_x, test_y)
time_end = time.time()
train_model.summary()
print("用时:", time_end-time_start)
print("测试集准确率:", acc)

运算过程:

50次epoch居然只用了7秒钟!!!



下面是使用keras搭建Resnet50模型

原理的话下面这位博主讲的比较详细,但是有一些小错误。

【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第二周作业_何宽的博客-CSDN博客_吴恩达卷积神经网络课后作业

首先导包,导入数据进行独热处理

import os
import keras as ks
import resnets_utils
import tensorflow as tf
import matplotlib.pyplot as plt
import time
import numpy as np
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'  # 忽略警告
np.random.seed(1)
train_x, train_y, test_x, test_y, classes = resnets_utils.load_dataset()
train_x = train_x/255
test_x = test_x/255def onehot(y, c):run = tf.one_hot(y, c)with tf.compat.v1.Session() as sess:result = sess.run(run)sess.close()return np.squeeze(result)train_y = onehot(train_y, classes.shape[0])
test_y = onehot(test_y, classes.shape[0])
print(train_x.shape, train_y.shape, test_x.shape, test_y.shape, classes.shape)

resnet采用跨3层构建捷径,如同吴恩达课上讲的,捷径有两种情况:

1.的维度=的维度,此时=g(+),无须任何处理。

2.的维度≠的维度,此时需要对进行卷积使得维度相等。 =g(+)

def same_block(a, f1, f2, f3):b_z0 = ks.layers.Conv2D(f1, kernel_size=(1, 1), strides=(1, 1), padding="valid")(a)b_z0_n = ks.layers.BatchNormalization()(b_z0)b_a0 = ks.layers.Activation("relu")(b_z0_n)b_z1 = ks.layers.Conv2D(f2, kernel_size=(3, 3), strides=(1, 1), padding="same")(b_a0)b_z1_n = ks.layers.BatchNormalization()(b_z1)b_a1 = ks.layers.Activation("relu")(b_z1_n)b_z2 = ks.layers.Conv2D(f3, kernel_size=(1, 1), strides=(1, 1), padding="valid")(b_a1)b_z2_n = ks.layers.BatchNormalization()(b_z2)b_z2_add = ks.layers.Add()([b_z2_n, a])return ks.layers.Activation("relu")(b_z2_add)def diffrerent_block(a, f1, f2, f3, s):b_z0 = ks.layers.Conv2D(f1, kernel_size=(1, 1), strides=(1, 1), padding="valid")(a)b_z0_n = ks.layers.BatchNormalization()(b_z0)b_a0 = ks.layers.Activation("relu")(b_z0_n)b_z1 = ks.layers.Conv2D(f2, kernel_size=(3, 3), strides=(s, s), padding="same")(b_a0)b_z1_n = ks.layers.BatchNormalization()(b_z1)b_a1 = ks.layers.Activation("relu")(b_z1_n)b_z2 = ks.layers.Conv2D(f3, kernel_size=(1, 1), strides=(1, 1), padding="valid")(b_a1)b_z2_n = ks.layers.BatchNormalization()(b_z2)b_a = ks.layers.Conv2D(f3, kernel_size=(1, 1), strides=(s, s), padding="valid")(a)b_a_n = ks.layers.BatchNormalization()(b_a)b_z2_add = ks.layers.Add()([b_z2_n, b_a_n])return ks.layers.Activation("relu")(b_z2_add)

然后搭建模型

def resnet50(x, c):x_input = ks.layers.Input(x.shape[1:], name="a0")# conv1a0 = ks.layers.ZeroPadding2D((3, 3))(x_input)z1 = ks.layers.Conv2D(64, (7, 7), strides=(2, 2))(a0)z1_bn = ks.layers.BatchNormalization(name="z1_bn")(z1)a1 = ks.layers.Activation(activation="relu")(z1_bn)# conv2a1_max = ks.layers.MaxPool2D((3, 3), strides=(2, 2))(a1)a2 = diffrerent_block(a1_max, 64, 64, 256, 1)a3 = same_block(a2, 64, 64, 256)a4 = same_block(a3, 64, 64, 256)# conv3a5 = diffrerent_block(a4, 128, 128, 512, 2)a6 = same_block(a5, 128, 128, 512)a7 = same_block(a6, 128, 128, 512)a8 = same_block(a7, 128, 128, 512)# conv4a9 = diffrerent_block(a8, 256, 256, 1024, 2)a10 = same_block(a9, 256, 256, 1024)a11 = same_block(a10, 256, 256, 1024)a12 = same_block(a11, 256, 256, 1024)a13 = same_block(a12, 256, 256, 1024)a14 = same_block(a13, 256, 256, 1024)# conv5a15 = diffrerent_block(a14, 512, 512, 2048, 2)a16 = same_block(a15, 512, 512, 2048)a17 = same_block(a16, 512, 512, 2048)a18 = ks.layers.AveragePooling2D(pool_size=(2, 2),padding="same" )(a17)# FCa19 = ks.layers.Flatten()(a18)a20 = ks.layers.Dense(c, activation="softmax")(a19)model = ks.Model(x_input, a20, name="resnet50")return model

训练模型,评估模型:

train_model = resnet50(train_x, classes.shape[0])
train_model.compile(optimizer=ks.optimizers.Adam(), loss="categorical_crossentropy", metrics=["accuracy"])
train_model.fit(train_x, train_y, 128, 80)
_, acc = train_model.evaluate(test_x, test_y)
train_model.save("my_model.h5")  # 保存模型
time_end = time.time()
train_model.summary()
print("用时:", time_end-time_start)
print("准确率 = ", acc)

损失随epoch变化趋势:

80次epoch,用时86s,测试集准确率0.9666

吴恩达DeepLearning第四部分作业week2 基于keras搭建CNNResnet50相关推荐

  1. 吴恩达deeplearning.ai系列课程笔记+编程作业(11)第四课 卷积神经网络-第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

    第四门课 卷积神经网络(Convolutional Neural Networks) 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) ...

  2. 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制

    第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...

  3. 吴恩达deeplearning.ai系列课程笔记+编程作业(14)序列模型(Sequence Models)-第二周 自然语言处理与词嵌入

    第五门课 序列模型(Sequence Models) 第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings) 文章目录 第五门课 ...

  4. 吴恩达deeplearning.ai系列课程笔记+编程作业(13)序列模型(Sequence Models)-第一周 循环序列模型(Recurrent Neural Networks)

    第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks) 文章目录 第五门课 序列模型(Sequence Models) 第一周 ...

  5. 吴恩达deeplearning.ai系列课程笔记+编程作业(6)第二课 改善深层神经网络-第二周:优化算法 (Optimization algorithms)

    第二门课 改善深层神经网络:超参数调试.正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and ...

  6. 吴恩达deeplearning.ai深度学习课程空白作业

      吴恩达deeplearning.ai深度学习课程的空白作业,包括深度学习微专业五门课程的全部空白编程作业,经多方整理而来.网上找来的作业好多都是已经被别人写过的,不便于自己练习,而且很多都缺失各种 ...

  7. 吴恩达Deeplearning.ai课程学习全体验:深度学习必备课程 By 路雪2017年8月14日 11:44 8 月 8 日,吴恩达正式发布了 Deepleanring.ai——基于 Cours

    吴恩达Deeplearning.ai课程学习全体验:深度学习必备课程 By 路雪2017年8月14日 11:44 8 月 8 日,吴恩达正式发布了 Deepleanring.ai--基于 Course ...

  8. 【干货】吴恩达deeplearning.ai专项课程历史文章汇总

    AI有道 一个有情怀的公众号 本文列出了吴恩达deeplearning.ai专项课程的所有精炼笔记,均是红色石头精心制作的原创内容.主要包括:<神经网络与深度学习>.<优化神经网络& ...

  9. 吴恩达-DeepLearning.ai-05 序列模型(一)

    吴恩达-DeepLearning.ai-05 序列模型 循环序列模型 1.为什么选择序列模型? 举了几个例子:语音识别.音乐生成.情感分析.DNA序列分析.机器翻译.视频动作识别.命名实体识别等 2. ...

最新文章

  1. C++中extern的使用
  2. 以问答形式,抽象中台领域框架
  3. Mysql数据库基础系列(二):表结构、键值
  4. ubuntu右键打开终端(Open Terminal Here)失效
  5. python中变量名后的逗号_深入浅析python变量加逗号,的含义
  6. 给std::string增加format函数
  7. spring mvc全局异常处理,注解实现
  8. 阿里程序员发70多万年终奖表示略感失望,网友:不要的话请给我!
  9. PIP scrapydo时报错ERROR: Command errored out with exit status 1: python setup.py egg_info Check the log
  10. 父与子python下载不了_python3-父与子的编程之旅安装pygame出现的问题
  11. 大数据Flink(八):Flink入门案例
  12. deepin linux固态硬盘安装教程,如何安装深度deepin 国产Linux教程 主要操作如下
  13. 公司开发的APP,如何生成一个二维码,供客户下载使用
  14. 【蓝牙sbc协议】sbc源码阅读笔记(二)——sbc_struct详解(上)
  15. UEFI+GPT双硬盘安装Win10+Ubuntu16.04双系统
  16. Windows 系统添加 VirtIO 驱动(Windows ISO 安装镜像添加驱动)
  17. 老中医治蛋变成绿色了
  18. K.M.P算法个人浅谈
  19. proteus——555 PWM 发生器
  20. 适用于***测试不同阶段的工具收集整理

热门文章

  1. java_猜拳小游戏——流之奥义
  2. Arduino追光小车
  3. html5诊断报告,放射科诊断报告模板.docx
  4. dedecms 自定义表单html,dedecms自定义表单和自定义表单如何用自己模板教程
  5. 小米商城官网(登录页,首页,详情页,我的购物车页,我的订单页,确认订单页)HTML+CSS+JS
  6. html5 ie7兼容性问题,解决浏览器IE6,IE7兼容性的总结
  7. 港科夜闻|香港科大海洋科学系主任兼讲座教授钱培元:成立产业推广部抢商机...
  8. 什么是SEM?SEM是否包括SEO?
  9. 我在「小米爬坑记」里,看到的 3 个创业真相
  10. vue3项目打包优化三步走