tensoflow2.0完成吴恩达卷积神经网络第二周作业

**

一句话,tensorflow2.0真是难用啊。

**

实验目的:
我们用600张图片,进行训练,最后区分笑脸和不笑的脸。
多说无益。我们上代码、

1.导入必要的包

import tensorflow as tf
import keras.backend as K
import math
import numpy as np
import h5py
from tensorflow.python.keras import layers, Sequential
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input,Dense, Conv2D, Flatten,MaxPooling2D,ZeroPadding2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow
from keras.applications.imagenet_utils import preprocess_input
%matplotlib inline

2.编写加载数据集函数

def mean_pred(y_true, y_pred):
    return K.mean(y_pred)

def load_dataset():
    train_dataset = h5py.File('datasets/train_happy.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_happy.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]))
    
    return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes

3.载入数据集并预测理


X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()
 
# 对数据集中的图像进行规范化 0-1
X_train = X_train_orig/255.
X_test = X_test_orig/255.
 
# 进行转型 从行向量变为列向量(2维数组表示) 每行代表一个样本
Y_train = Y_train_orig.T
Y_test = Y_test_orig.T
 
print ("number of training examples = " + str(X_train.shape[0]))
print ("number of test examples = " + str(X_test.shape[0]))
print ("X_train shape: " + str(X_train.shape))
print ("Y_train shape: " + str(Y_train.shape))
print ("X_test shape: " + str(X_test.shape))
print ("Y_test shape: " + str(Y_test.shape))

在这里插入图片描述
3.1打开数据集中一张图片看看

index = 5
plt.imshow(X_train_orig[index])

在这里插入图片描述
4.下面开始编写模型

model = Sequential([
    layers.ZeroPadding2D((3,3)),  #填充0
    layers.Conv2D(32,(7,7),strides=(1,1)),
    layers.BatchNormalization(axis=3),  #批量标准化
    layers.Activation("relu"),
    layers.MaxPooling2D((2,2)), #最大次池化层
    layers.Flatten(),  #铺平
    layers.Dense(1,activation="sigmoid")])

#优化算法:Adam
#交叉熵损失值函数:BinaryCrossentropy
#准确率:accuracy
model.compile(optimizer="adam",loss=tf.keras.losses.BinaryCrossentropy(),metrics=["accuracy"])

model.fit(x = X_train,y = Y_train,epochs=40,batch_size=16)

在这里插入图片描述
效果不错。

4.1训练好的权重出来了,把测试集扔进去看看效果。

preds = model.evaluate(x = X_test,y=Y_test)
print(——————————————————————————————————————)
print("Loss=" + str(preds[0]))
print("Test Accurcy = " + str(preds[1]))

在这里插入图片描述
看着也还行。主要是数据量小。网络层太浅。就不加Dropout,正则,这些辅助了。没意义。

5.2 检验一下算法效果。 0:是不笑,1:是笑

  1. 图像包里有一张不笑的图片。用他来测试
#图像相对路径  
img_path = 'images/my_image.jpg'
#可视化图片
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(model.predict(x))

在这里插入图片描述
还行。吴恩达作业这里就完成。 下一篇开始残差网络。
完整项目:https://pan.baidu.com/s/10D_UAj8756Lnh9P0iTtQnw 提取码:04ip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值