看课程之后,对卷积神经网络的层次更加清晰。复现代码,加深一下印象。(本博文的代码,参考了其他博主的博文,并且此博文只作为本人学习记录笔记。帮助自己理顺思路和了解网络结构)
准备
a、需要导入的包
import numpy as np
import math
import h5py
import matplotlib.pyplot as plt
import tensorflow as tf
import matplotlib.image as mpimg
from tensorflow.python.framework import ops
from CNNDeepL4W1 import cnn_utils #导入加载数据的文件
np.random.seed(1) #设置随机种子
b、我的项目结构
1、加载本地数据集
此处的数据集使用的是之前吴恩达老师提供的手势图片数据集。因为图片识别经常会用到读取数据集这一操作,因此把加载数据放在一独立的文件中,方便以后使用。此文件名为 cnn_utils.py.
#导入需要的包
import math
import numpy as np
import h5py
#读取本地数据
def load_dataset():
train_dataset = h5py.File('datasets\dtrain_signs.h5', "r") #这里的路径修改为自己数据集的路径
train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels
test_dataset = h5py.File('datasets\dtest_signs.h5', "r")
test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels
classes = np.array(test_dataset["list_classes"][:]) # the list of classes
train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
print(train_set_y_orig.shape)
return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes
2、框架搭建
本简单卷积网络的层次主要为:卷积-池化-卷积-池化-全连接-输出。卷积后采用relu函数为激活函数。
(1)、本次卷积网络使用tensorFlow框架进行搭建,因此首先创建占位符
def create_placeholders(n_H0, n_W0, n_C0, n_y):
"""
为session创建占位符
参数:
n_H0 - 实数,输入图像的高度
n_W0 - 实数,输入图像的宽度
n_C0 - 实数,输入的通道数
n_y - 实数,分类数
输出:
X - 输入数据的占位符,维度为[None, n_H0, n_W0, n_C0],类型为"float"
Y - 输入数据的标签的占位符,维度为[None, n_y],维度为"float"
"""
X = tf.placeholder(tf.float32, [None,