吴恩达作业8:三层神经网络实现手势数字的识别(基于tensorflow)

数据集的载入,随机产生mini-batch放在tf_utils.py,代码如下

import h5py
import numpy as np
import tensorflow as tf
import mathdef 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 featurestrain_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labelstest_dataset = h5py.File('datasets/test_signs.h5', "r")test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set featurestest_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labelsclasses = np.array(test_dataset["list_classes"][:]) # the list of classestrain_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, classesdef random_mini_batches(X, Y, mini_batch_size, seed = 0):"""Creates a list of random minibatches from (X, Y)Arguments:X -- input data, of shape (input size, number of examples)Y -- true "label" vector (containing 0 if cat, 1 if non-cat), of shape (1, number of examples)mini_batch_size - size of the mini-batches, integerseed -- this is only for the purpose of grading, so that you're "random minibatches are the same as ours.Returns:mini_batches -- list of synchronous (mini_batch_X, mini_batch_Y)"""m = X.shape[1]                  # number of training examplesmini_batches = []np.random.seed(seed)# Step 1: Shuffle (X, Y)permutation = list(np.random.permutation(m))shuffled_X = X[:, permutation]shuffled_Y = Y[:, permutation]#.reshape((Y.shape[0],m))# Step 2: Partition (shuffled_X, shuffled_Y). Minus the end case.num_complete_minibatches = math.floor(m/mini_batch_size) # number of mini batches of size mini_batch_size in your partitionningfor k in range(0, num_complete_minibatches):mini_batch_X = shuffled_X[:, k * mini_batch_size : k * mini_batch_size + mini_batch_size]mini_batch_Y = shuffled_Y[:, k * mini_batch_size : k * mini_batch_size + mini_batch_size]mini_batch = (mini_batch_X, mini_batch_Y)mini_batches.append(mini_batch)# Handling the end case (last mini-batch < mini_batch_size)if m % mini_batch_size != 0:mini_batch_X = shuffled_X[:, num_complete_minibatches * mini_batch_size : m]mini_batch_Y = shuffled_Y[:, num_complete_minibatches * mini_batch_size : m]mini_batch = (mini_batch_X, mini_batch_Y)mini_batches.append(mini_batch)return mini_batchesdef convert_to_one_hot(Y, C):##Y.reshape(-1) 变成一行Y = np.eye(C)[Y.reshape(-1)].Treturn Ydef predict(X, parameters):W1 = tf.convert_to_tensor(parameters["W1"])b1 = tf.convert_to_tensor(parameters["b1"])W2 = tf.convert_to_tensor(parameters["W2"])b2 = tf.convert_to_tensor(parameters["b2"])W3 = tf.convert_to_tensor(parameters["W3"])b3 = tf.convert_to_tensor(parameters["b3"])params = {"W1": W1,"b1": b1,"W2": W2,"b2": b2,"W3": W3,"b3": b3}x = tf.placeholder("float", [12288, 1])z3 = forward_propagation_for_predict(x, params)p = tf.argmax(z3)sess = tf.Session()prediction = sess.run(p, feed_dict = {x: X})return predictiondef forward_propagation_for_predict(X, parameters):"""Implements the forward propagation for the model: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAXArguments:X -- input dataset placeholder, of shape (input size, number of examples)parameters -- python dictionary containing your parameters "W1", "b1", "W2", "b2", "W3", "b3"the shapes are given in initialize_parametersReturns:Z3 -- the output of the last LINEAR unit"""# Retrieve the parameters from the dictionary "parameters" W1 = parameters['W1']b1 = parameters['b1']W2 = parameters['W2']b2 = parameters['b2']W3 = parameters['W3']b3 = parameters['b3'] # Numpy Equivalents:Z1 = tf.add(tf.matmul(W1, X), b1)                      # Z1 = np.dot(W1, X) + b1A1 = tf.nn.relu(Z1)                                    # A1 = relu(Z1)Z2 = tf.add(tf.matmul(W2, A1), b2)                     # Z2 = np.dot(W2, a1) + b2A2 = tf.nn.relu(Z2)                                    # A2 = relu(Z2)Z3 = tf.add(tf.matmul(W3, A2), b3)                     # Z3 = np.dot(W3,Z2) + b3return Z3

首先看数据集:

import tf_utils
import cv2
train_set_x_orig, train_set_Y, test_set_x_orig, test_set_Y, classes = tf_utils.load_dataset()
print('训练样本={}'.format(train_set_x_orig.shape))
print('训练样本标签={}'.format(train_set_Y.shape))
print('测试样本={}'.format(test_set_x_orig.shape))
print('测试样本标签={}'.format(test_set_Y.shape))
print('第五个样本={}'.format(train_set_Y[0,5]))
cv2.imshow('1.jpg',train_set_x_orig[5,:,:,:])
cv2.waitKey()

打印结果:可看出1080个训练样本,size为(64,64,3),其中手势数字用相应的数字代表,故后面要处理成one-hot(samples,6)

利用三层神经网络,W1=(25,64*64*3),W2=(12,25),W1=(6,12),输入X=(64*64*3,samples),最终y_pred=(6,samples),做一个转置与给定的真实y做损失,代码如下:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import tf_utils
import cv2
"""
创建 placeholder
"""
def create_placeholder(n_x,n_y):X=tf.placeholder(tf.float32,shape=[n_x,None],name='X')Y = tf.placeholder(tf.float32, shape=[n_y, None], name='Y')return X,Y
"""
初始化权重
"""
def initialize_parameters():tf.set_random_seed(1)W1=tf.get_variable(name='W1',shape=[25,12288],dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer(seed=1))b1 = tf.get_variable(name='b1', shape=[25, 1], dtype=tf.float32,initializer=tf.zeros_initializer())W2 = tf.get_variable(name='W2', shape=[12, 25], dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer(seed=1))b2 = tf.get_variable(name='b2', shape=[12, 1], dtype=tf.float32,initializer=tf.zeros_initializer())W3 = tf.get_variable(name='W3', shape=[6, 12], dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer(seed=1))b3 = tf.get_variable(name='b3', shape=[6, 1], dtype=tf.float32,initializer=tf.zeros_initializer())parameters={'W1': W1,'b1': b1,'W2': W2,'b2': b2,'W3': W3,'b3': b3}return parameters
"""
one-hot编码
"""
def convert_one_hot(Y,C):one_hot=np.eye(C)[Y.reshape(-1)].Treturn one_hot
"""
前向传播
"""
def forward_propagation(X,parameters):W1 = parameters['W1']b1 = parameters['b1']W2 = parameters['W2']b2 = parameters['b2']W3 = parameters['W3']b3 = parameters['b3']Z1=tf.add(tf.matmul(W1,X),b1)A1=tf.nn.relu(Z1)Z2 = tf.add(tf.matmul(W2, A1) , b2)A2 = tf.nn.relu(Z2)Z3 = tf.add(tf.matmul(W3, A2) , b3)return Z3
"""
计算损失值
"""
def compute_cost(Z3,Y):Z_input=tf.transpose(Z3) ##转置Y = tf.transpose(Y)  ####tf.nn.softmax_cross_entropy_w  要求shape是(number of examples,num_class)cost=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=Z_input,labels=Y))return cost
"""
构建模型
"""
def model(train_X,train_Y,test_X,test_Y,learning_rate,num_pochs,minibatch_size):tf.set_random_seed(1)seed=3(n_x,m)=train_X.shape #(12288,1080)costs=[]n_y=train_Y.shape[0] #(6,1080)X, Y = create_placeholder(n_x, n_y)parameters = initialize_parameters()Z3 = forward_propagation(X, parameters)#print(Z3)cost = compute_cost(Z3, Y)optimizer=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)for i in range(num_pochs):epoch_cost=0mini_batches=tf_utils.random_mini_batches(train_X,train_Y,minibatch_size,seed)num_minibatches=int(m/minibatch_size)for mini_batche in mini_batches:(mini_batche_X,mini_batche_Y)=mini_batche_,temp_cost=sess.run([optimizer,cost],feed_dict={X:mini_batche_X,Y:mini_batche_Y})epoch_cost += temp_cost / num_minibatchesif i%100==0:#cost=sess.run(cost,feed_dict={X:mini_batche_X,Y:mini_batche_Y})print('after {} iterations minibatch_cost={}'.format(i,epoch_cost))costs.append(epoch_cost)plt.plot(costs)plt.xlabel('iterations')plt.ylabel('cost')plt.title('learning_rate={}'.format(learning_rate))plt.show()parameters=sess.run(parameters)#print('parameters={}'.format(parameters))correct_prediction=tf.equal(tf.argmax(Z3,0),tf.argmax(Y,0))##0 代表按列取索引最大值 1代表行索引最大值accuarcy=tf.reduce_mean(tf.cast(correct_prediction,'float'))print('train accuarcy is',sess.run(accuarcy,feed_dict={X: train_X,Y: train_Y}))print('test accuarcy is ',sess.run(accuarcy,feed_dict={X: test_X, Y: test_Y}))return parameters
"""
测试模型
"""
def test_model():train_set_x_orig, train_set_Y, test_set_x_orig, test_set_Y, classes = tf_utils.load_dataset()train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0],train_set_x_orig.shape[1] * train_set_x_orig.shape[2] * 3).Ttest_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0],test_set_x_orig.shape[1] * test_set_x_orig.shape[2] * 3).Ttrain_X = train_set_x_flatten / 255  #(12288,1080)test_X = test_set_x_flatten / 255train_Y = convert_one_hot(train_set_Y,6)#(6,1080)#print('train_y',train_Y.shape)test_Y = convert_one_hot(test_set_Y, 6)parameters=model(train_X, train_Y, test_X, test_Y, learning_rate=0.0001, num_pochs=1000, minibatch_size=32)img = cv2.imread('thumbs_up.jpg')imgsize = cv2.resize(img, (64, 64), interpolation=cv2.INTER_CUBIC).reshape(1,64*64*3).Tcv2.imshow('imgsize', imgsize)image_predict=tf_utils.predict(imgsize,parameters)print(image_predict)
if __name__ == '__main__':test_model()

打印结果:

下图的预测结果是1  符合

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于visual Studio2013解决面试题之0307最后谁剩下

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/* n 个数字&#xff08;0,1,…,n-1&#xff09;形成一个圆圈&#xff0c;从数字 0 开始&#xff0c;每次从这个圆圈中删除第 m 个数字&#xff08;第一个为当前数字本身&#xff0c;第二个为当前数字的下一个数字&…

谷歌、苹果等大佬亲自戳穿自动驾驶完美童话,技术、场景、安全牢笼实难突围!...

来源&#xff1a; 物联网智库摘要&#xff1a;自动驾驶普及不仅局限于自身技术和应用场景&#xff0c;而且与产业链各环节密切相关。一项科技从诞生到被人们所接受是一个循序渐进的过程&#xff0c;自动驾驶真正普及还任重而道远。2018年11月1日百度世界大会上&#xff0c;百度…

使用文件监控对象FileSystemWatcher实现数据同步

使用文件监控对象FileSystemWatcher实现数据同步 原文 使用文件监控对象FileSystemWatcher实现数据同步 最近在项目中有这么个需求&#xff0c;就是得去实时获取某个在无规律改变的文本文件中的内 容。首先想到的是用程序定期去访问这个文件&#xff0c;因为对实时性要求很高&a…

吴恩达作业11:残差网络实现手势数字的识别(基于 keras)+tensorbord显示loss值和acc值

一&#xff0c;残差网络实现手写数字识别 数据集地址&#xff1a;https://download.csdn.net/download/fanzonghao/10551018 首先来resnets_utils.py,里面有手势数字的数据集载入函数和随机产生mini-batch的函数&#xff0c;代码如下&#xff1a; import os import numpy as…

通过SVD求解单应矩阵

我们现在知道原则上4对匹配点对就可以唯一确定单应矩阵&#xff0c;但是在实际应用中我们无法保证两个视图严格满足使用条件&#xff08;只有旋转变换&#xff1b;远景&#xff1b;平面场景&#xff09;&#xff0c;所以要使用拟合的方法求一个最优解。现在就来以SIFT算法源码为…

注意力机制(Attention)最新综述论文及相关源码

来源&#xff1a;专知注意力机制(Attention)起源于模仿人类的思维方式&#xff0c;后被广泛应用于机器翻译、情感分类、自动摘要、自动问答等、依存分析等机器学习应用中。专知编辑整理了Arxiv上一篇关于注意力机制在NLP中应用的综述《An Introductory Survey on Attention Mec…

橙子楼的猥琐大叔

故事要从暑假开始说起&#xff0c;那时我还在准备考研&#xff0c;每天往返于教室、宿舍和食堂&#xff0c;单调但不会无趣&#xff0c;常常会有故事发生&#xff0c;生活也很充实。 考研的一般都会在固定的教室有个自己的位子。 坐我正前面的是一个妹子&#xff0c;准确的说是…

Pycharm下安装Tensorflow

趁着帮师妹看Github上的一个项目&#xff0c;督促自己学习一下Python下训练神经网络的一整套流程。没想到在一开头就遇到了不少问题。首先是Pycharm中导入Github项目的问题&#xff0c;还有安装tensorflow的问题&#xff0c;之后又遇到了多种版本的Python共存的问题。在这里记录…

吴恩达作业9:卷积神经网络实现手势数字的识别(基于tensorflow)

数据集链接&#xff1a;https://download.csdn.net/download/fanzonghao/10551018 提供数据集代码放在cnn_utils.py里。 import math import numpy as np import h5py import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.python.framework import ops…

AI洞观 | 戴上红帽 看IBM冲杀云计算市场

来源 | 网易智能&#xff08;公众号 smartman163&#xff09;摘要&#xff1a;可以预计&#xff0c;未来的云计算市场将越来越比拼生态综合服务能力&#xff0c;云计算行业进入下半场&#xff0c;谁在裸泳不久见分晓。IBM豪掷340亿美元收购红帽&#xff08;Red Hat&#xff09;…

基于visual Studio2013解决面试题之0608找出两个只出现一次的数

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*已知数组中有两个数只出现一次&#xff0c;其他成对出现&#xff0c;请找出这两个数解决办法&#xff1a;1&#xff09;简化问题&#xff0c;如果数组中只有一个数出现一次&#xff0c;那么只要对这个数组做异或即可2…

工业富联:左手工业AI,右手“雾小脑”

来源&#xff1a;先进制造业摘要&#xff1a;11月14日&#xff0c;第二十届中国国际高新技术成果交易会在深圳会展中心开幕。11月14日&#xff0c;第二十届中国国际高新技术成果交易会在深圳会展中心开幕。备受瞩目的是&#xff0c;在分论坛“2018第九届中国信息通信论坛”上&a…

吴恩达作业10:用卷积神经网络识别人脸happy(基于Keras)

数据集提供的代码放在kt_utils.py&#xff1a; import keras.backend as K import math import numpy as np import h5py import matplotlib.pyplot as pltdef mean_pred(y_true, y_pred):return K.mean(y_pred)def load_dataset():train_dataset h5py.File(datasets/train_h…

清华大学:智能驾驶背景下转向系统发展趋势

来源&#xff1a;智车科技这里近几年&#xff0c;自动驾驶汽车的研发与推广发展迅速&#xff0c;根据国家工业和信息化部等发布的《汽车产业中长期发展规划》&#xff0c;2025 年&#xff0c;高度和完全自动驾驶汽车开始进入市场&#xff0c;在此背景下&#xff0c;线控转向技术…

TensorFlow学习之——checkpoints

在看别人的训练网络中一开头就遇到这样一行代码&#xff1a; ckpt tf.train.get_checkpoint_state(directories.checkpoints) 鼠标放在函数名上&#xff0c;ctrlB&#xff0c;或者ctrl点击函数名&#xff0c;可以跳转到函数的定义&#xff0c;可以知道tf.train.get_checkpoi…

jQuery.ajax

(摘录)http://www.cnblogs.com/XuebinDing/archive/2012/03/01/2376041.html 情况一、使用WebService验证 1.新建demo.aspx页面。2.首先在该页面的后台文件demos.aspx.cs中添加引用。 using System.Web.Services; 3.无参数的方法调用. 大家注意了&#xff0c;这个版本不能低于.…

基于Keras的卷积神经网络用于猫狗分类(未进行数据增强)+卷积层可视化

首先看数据集路径&#xff1a; cats和dogs存放的就是各种大小的猫狗图片。 读取数据集代码&#xff1a; import os import matplotlib.pyplot as plt """ 读取数据 返回数据的文件夹名字&#xff0c;和具体的猫狗的路径 """ def read_data(): …

芯片植入:“增强人类”的生物黑科技

来源&#xff1a;资本实验室摘要&#xff1a;当医疗、电子、生物科技快速发展&#xff0c;并紧密融合的时候&#xff0c;许多科幻电影中的场景正在不断变为现实&#xff0c;而“增强人类”、”赛博格“、“电子人”、“生化人”正在成为这个时代最值得期待&#xff0c;又多少让…

如何通过VC的 CHttpFile 抓取网页内容

在点击一个按钮时开始请求你输入的地址。void CHttpFileDlg::OnButton1() {   CString url;   GetDlgItemText(IDC_EDIT1,url); // IDC_EDIT1 是一个输入框的名字。   char* headers"Accept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:VCTestClient\r\n"; …

windows安装ubuntu16.04LTS 更换系统源为阿里源 安装ubuntu找不到windows 删除内核 更换pip源 升级pip源报错 ubuntu命令

一&#xff0c;安装ubuntu ubuntu镜像Index of /ubuntu-releases/18.04/ 首先在windows下硬盘划分出100G的空间&#xff0c;并且制作一个ubuntu的启动盘。在windows安装easy BCD用于开机启动ubuntu。下面看安装过程&#xff1a; 选择语言&#xff0c;我选择是英语 我选择的是…