本文使用了tensorflow框架构建了一个3层的神经网络,这个框架使神经网络的实现简化了很多,主要是因为此框架的计算图结构和最优化函数API,使得具体实现时只需手动实现前向传播,其他基本是调用API。理解tensorflow的关键在于理解它的计算图结构computation graph和placeholder机制。虽然方便,但博主依然不推荐初学者直接使用这类框架,因为方便的代价是隐藏了诸多细节,看不到细节就不能透彻理解神经网络具体的学习机制,难以活用,更难以创新。
顺便吐槽下win环境下tensorflow的安装真是坑,与anaconda的共存更坑
数据集下载地址:http://pan.baidu.com/s/1bpo8DEv
把数据集下载后放在代码路径下才可运行此程序,博主的环境是Pycharm,python3.7
在这个测试集下,可以明显看出已经过拟合了,读者可以加入L2正则化再试试
import tensorflow as tf
import time
import numpy as np
import h5py
import matplotlib.pyplot as plt
import scipy
import math
import numpy as np
import h5py
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.python.framework import ops
# from PIL import Image
from scipy import ndimage
# from dnn_app_utils_v2 import *
#==============================================================================================================
# A 3-layer neural network demo in tensorflow framework,with minibatch train-method and adam optimal method
# dataset: hand-gesture picture
#soft-max:4-label-classify
#it may take about 5 minites even with gpu since there are quite a lot computation
#==============================================================================================================
def load_dataset():
train_dataset = h5py.File('datasets/train_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/test_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