tensorflow1.1/构建卷积神经网络人脸识别
来源:互联网 发布:金星秀转战网络平台 编辑:程序博客网 时间:2024/05/21 08:03
环境:tensorflow1.1,python3,matplotlin2.02
olivettifaces是纽约大学的一个比较小的人脸库,由40个人的400张图片构成,即每个人的人脸图片为10张。每张图片的灰度级为8位,每个像素的灰度大小位于0-255之间,每张图片大小为64×64。图片大小是1190*942,一共有20*20张人脸,故每张人脸大小是(1190/20)*(942/20)即57*47=2679本文所用的训练数据就是这张图片,400个样本,40个类别。
#coding:utf-8"""python 3tensorflow 1.1matplotlib 2.02"""import tensorflow as tfimport pickleimport numpy as npimport matplotlib.pyplot as plt#读取数据集with open('facedataset.pickle','rb') as f: (train_data,train_labels),(test_data,test_labels) = pickle.load(f)tf.set_random_seed(100)np.random.seed(100)batch_size = 40learning_rate = 0.01#定义one_hotdef label_to_one_hot(labels_dense, num_classes=10): num_labels = labels_dense.shape[0] index_offset = np.arange(num_labels) * num_classes labels_one_hot = np.zeros((num_labels, num_classes)) labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1 return labels_one_hottrain_data = train_data.astype(np.float32)test_data = test_data.astype(np.float32)train_labels = label_to_one_hot(train_labels,num_classes=40).astype(np.int32)test_labels = label_to_one_hot(test_labels,num_classes=40).astype(np.int32)#查看图片plt.imshow(train_data[0].reshape((57,47)))plt.title('the face picture',fontdict={'size':16,'color':'c'})plt.gray()plt.show()#定义输入形状xs = tf.placeholder(tf.float32,[None,57*47])ys = tf.placeholder(tf.int32,[None,40])#构建神经网络x = tf.reshape(xs,[-1,57,47,1])conv1 = tf.layers.conv2d(inputs=x,filters=5,kernel_size=3,strides=1,padding='same',activation=tf.nn.relu)pool1 = tf.layers.max_pooling2d(conv1,pool_size=2,strides=2)conv2 = tf.layers.conv2d(inputs=pool1,filters=10,kernel_size=3,strides=1,padding='same',activation=tf.nn.relu)pool2 = tf.layers.max_pooling2d(conv2,pool_size=2,strides=2)flat = tf.reshape(pool2,[-1,14*11*10])output = tf.layers.dense(flat,40)#计算lossloss = tf.losses.softmax_cross_entropy(onehot_labels=ys,logits=output)train = tf.train.AdamOptimizer(learning_rate).minimize(loss)_,accuracy = tf.metrics.accuracy(labels=tf.argmax(ys,axis=1),predictions=tf.argmax(output,axis=1))with tf.Session() as sess: init = tf.group(tf.global_variables_initializer(),tf.local_variables_initializer()) sess.run(init) for i in range(10): _,c = sess.run([train,loss],feed_dict={xs:train_data,ys:train_labels}) print('= = = = = = > > > > > >loss: %.4f' %c) acc = sess.run(accuracy,feed_dict={xs:test_data,ys:test_labels}) print('accuracy is :%.4f' %acc)
由于数据集很小,在训练的时候就没有考虑采用batch训练
结果:
训练注意事项
在神经网络训练的过程中,如果数据集没有被打乱,原始数据集是有序的,会对检测精度造成很大影响
上述实验中在训练集和label上设置相同的随机种子,打乱顺序后训练,检测精度显著提高。
阅读全文
0 0
- tensorflow1.1/构建卷积神经网络人脸识别
- tensorflow1.1/构建卷积神经网络识别文本
- tensorflow1.1/构建深度卷积神经网络识别物体识别
- tensorflow1.1/构建卷积神经网络识别手写数字
- tensorflow1.1/构建双向神经网络识别mnist
- keras/构建卷积神经网络人脸识别
- tensorflow1.1/构建神经网络分类
- keras/构建卷积神经网络识别mnist
- keras构建卷积神经网络识别cifar10
- tensorflow1.1/autoencoder人脸识别
- tensorflow1.1/variational autoencoder人脸识别
- tensorflow1.1/循环神经网络手写数字啊识别
- Tensorflow实现卷积神经网络,用于人脸关键点识别
- 论文理解:基于卷积神经网络的人脸识别方法
- Tensorflow实现卷积神经网络,用于人脸关键点识别
- Tensorflow实现卷积神经网络,用于人脸关键点识别
- tensorflow1.1/人脸识别Yale数据集
- tensorflow&卷积神经网络&字符识别
- 云端TensorFlow读取数据IO的高效方式
- 浅谈身为小白学习Linux系统的四点实用建议
- 架构师---(大型网站分布式架构)
- 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3158064)问题
- ccf模拟试题第一题
- tensorflow1.1/构建卷积神经网络人脸识别
- 程序员面试金典:翻转子串、链表中倒数第k个结点
- App打造自定义的统计SDK, 是时候和友盟说分手了
- 基于 mini2440 电阻式触摸屏(四):mini2440触摸屏驱动分析
- OpenCV轮廓、边缘、边界的相关函数
- 使用BigDecimal进行精确运算
- mybatis时间换算
- ongoDB——第一天 基础入门
- c