fer2013图片库。

模型训练结束,保存,下次可接着继续训练。

注意windows的路径输入,最后的“\"不知怎么处理好,只好用LOGS_PATH=os.path.normcase('c:/temp/log_mnist_softmax/')

将正斜杠改成反斜杠。

tensorflow的tensorboard真的很酷,有时间再研究。

# coding=utf-8
#import string, os, sys
import numpy as np
#import matplotlib.pyplot as plt
#import scipy.io
#import random
import tensorflow as tf
import pandas as pd
#import cv2
from datetime import datetime
import os###:csv文件数据处理:
file_path = r'C:\temp\fer2013\fer2013.csv'
f_train = open(file_path, encoding = 'UTF-8')
data = pd.read_csv(f_train, dtype='a')
labels = np.array(data['emotion'],np.int)
imagebuffer = np.array(data['pixels'])
#删掉空格,每个图片转化为数组:
images = np.array([np.fromstring(image,np.uint8,sep=' ') for image in imagebuffer])
#s释放临时buff:
del imagebuffer
#最后一个维度的大小:
num_shape = int(np.sqrt(images.shape[-1]))
#调整数组为48*48图片:
num_samples = images.shape[0]
images.shape = (-1,num_shape,num_shape)
Face_data = np.zeros((num_samples, num_shape,num_shape))
Face_label = np.zeros((num_samples, 7), dtype=int)#数据归一化:
for i in range(num_samples):x = images[i].astype(np.float)   x_max = x.max()x = x/(x_max+0.0001)Face_data[i] = xFace_label[i, labels[i]] = 1#plt.subplot(5,5,i+1)#plt.axis('off')#plt.imshow(x,cmap='Greys_r')
#plt.show()TRAIN_NUM = 1000
TEST_NUM = 100train_x = Face_data [0:TRAIN_NUM, :]
train_y = Face_label [0:TRAIN_NUM, :]test_x =Face_data [TRAIN_NUM : TRAIN_NUM+TEST_NUM, :]
test_y = Face_label [TRAIN_NUM : TRAIN_NUM+TEST_NUM, :]BATCH_SIZE = 100
LEARNING_RATE = 0.001
MAX_ITERATIONS = 101
REGULARIZATION=1e-2
IMAGE_SIZE=48
NUM_LABELS=7
PROB_DROPOUT = 0.5   # Dropout, probability to keep units
LOGS_PATH=os.path.normcase('c:/temp/log_mnist_softmax/')## Create some wrappers for simplicity:
#自定义集合losses,list tensor(以后tf.add_n()进行累加):
def add_to_regularization_loss(w,b):tf.add_to_collection('losses', tf.nn.l2_loss(w))tf.add_to_collection('losses', tf.nn.l2_loss(b))# Conv2D wrapper, with bias and relu activation:
def weight_variable(shape,stddev=0.02,name=None):initial=tf.truncated_normal(shape,stddev=stddev)if name is None:return tf.Variable(initial)else:return tf.get_variable(name,initializer=initial)def bias_variable(shape,name=None):initial=tf.constant(0.0,shape=shape)#if name is None:return tf.Variable(initial)else:return tf.get_variable(name,initializer=initial)def conv2d(x, W, b,strides=1):cov = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')return tf.nn.relu(tf.nn.bias_add(cov, b))# MaxPool2D wrapper:
def maxpool2d(x, k=2):return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],padding='VALID')# Create model:
def cnn_model(x, weights, biases, prob_dropout):x = tf.reshape(x, shape=[-1, 48, 48, 1])#with tf.name_scope('conv1'):tf.summary.histogram('w_conv1',weights['wc1'])tf.summary.histogram('b_conv1',biases['bc1'])y_conv1=conv2d(x, weights['wc1'], biases['bc1'])p_conv1=maxpool2d(y_conv1)add_to_regularization_loss(weights['wc1'], biases['bc1'])with tf.name_scope('conv2'):tf.summary.histogram('w_conv2',weights['wc2'])tf.summary.histogram('b_conv2',biases['bc2'])y_conv2=conv2d(p_conv1, weights['wc2'], biases['bc2'])p_conv2=maxpool2d(y_conv2)add_to_regularization_loss(weights['wc2'], biases['bc2'])# Fully connected layer:# Reshape conv2 output to fit fully connected layer input:with tf.name_scope('fuc1'):tf.summary.histogram('w_fuc1',weights['wf1'])tf.summary.histogram('b_fuc1',biases['bf1'])fuc1_1 = tf.reshape(p_conv2, [-1, weights['wf1'].get_shape().as_list()[0]])z_fuc1 = tf.add(tf.matmul(fuc1_1, weights['wf1']), biases['bf1'])y_fuc1 = tf.nn.relu(z_fuc1)# Apply Dropout:d_fuc1 = tf.nn.dropout(y_fuc1, prob_dropout)# Output, class prediction    with tf.name_scope('fuo'):tf.summary.histogram('w_fuo',weights['wfo'])tf.summary.histogram('b_fuo',biases['bfo'])           return tf.add(tf.matmul(d_fuc1, weights['wfo']), biases['bfo'])# Store layers weight & bias:
weights = {# 5x5 conv, 1 input, 32 outputs:'wc1': weight_variable([5, 5, 1, 32],name='w_conv1'),# 3x3 conv, 32 inputs, 64 outputs:'wc2': weight_variable([3, 3, 32, 64],name='w_conv2'),# fully connected:'wf1': weight_variable([int(IMAGE_SIZE/4)*int(IMAGE_SIZE/4)*64, 256],name='w_fuc1'),# 256 inputs, 7 outputs (class prediction):'wfo': weight_variable([256, NUM_LABELS],name='w_fuo')
}biases = {'bc1': bias_variable([32],name='b_conv1'),'bc2': bias_variable([64],name='b_conv2'),    'bf1': bias_variable([256],name='b_fuc1'),'bfo': bias_variable([NUM_LABELS],name='b_fuo')
}# Define loss, entropy+reg_losses:
def loss(z_output,y_desired):loss_cross_entropy=\tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=z_output, labels=y_desired))tf.summary.scalar('Loss_entropy',loss_cross_entropy)reg_losses=tf.add_n(tf.get_collection('losses'))tf.summary.scalar('Reg_losses',reg_losses)return loss_cross_entropy+REGULARIZATION*reg_losses#Define optimizer:
def train(loss,step):return tf.train.AdamOptimizer(LEARNING_RATE).minimize(loss,global_step=step)def get_next_batch(images,labels,step):offset=(step*BATCH_SIZE)%(images.shape[0])#??-BATCH_SIZE)batch_images=images[offset:offset+BATCH_SIZE]batch_labels=labels[offset:offset+BATCH_SIZE]return batch_images,batch_labels#####main:# tf Graph input:
x_input = tf.placeholder(tf.float32, [None, IMAGE_SIZE,IMAGE_SIZE],name='x_input')
y_desired = tf.placeholder(tf.float32, [None, NUM_LABELS],name='y_desired')
prob_dropout=tf.placeholder(tf.float32)global_step=tf.Variable(0,trainable=False)# Construct model:
z_output = cnn_model(x_input, weights, biases, prob_dropout)
y_output=tf.nn.softmax(z_output,name='y_output')#prob of being x class loss_val=loss(z_output,y_desired)
train_op=train(loss_val,global_step)
summary_op=tf.summary.merge_all()
with tf.Session() as sess:sess.run(tf.global_variables_initializer())summary_writer=tf.summary.FileWriter(LOGS_PATH,graph=tf.get_default_graph())#saver=tf.train.Saver()ckpt=tf.train.get_checkpoint_state(LOGS_PATH)if ckpt and ckpt.model_checkpoint_path:saver.restore(sess,ckpt.model_checkpoint_path)print('Model Restored!')for step in range(MAX_ITERATIONS):batch_image,batch_label=get_next_batch(train_x, train_y, step)feed_dict_train={x_input:batch_image,y_desired:batch_label,prob_dropout:PROB_DROPOUT}feed_dict_test={x_input:test_x,y_desired:test_y,prob_dropout:1.0}sess.run(train_op,feed_dict=feed_dict_train)if step % 10==0:train_loss,summary_str=sess.run([loss_val,summary_op],feed_dict=feed_dict_train)summary_writer.add_summary(summary_str, global_step=step)print('Training Loss: %f'%train_loss)if step % 20 ==0:test_loss=sess.run(loss_val,feed_dict=feed_dict_test)print('%s Test Loss:%f'%(datetime.now(),test_loss))saver.save(sess,LOGS_PATH+'model.ckpt',global_step=step)#new_saver.restore(sess, r'c:/temp/saved_mnist_cnn/saved_mnist_cnn.ckp')
#save_path=saver.save(sess,'c:/temp/saved_mnist_cnn')

tensorflow第十一步CNN表情识别相关推荐

  1. TensorFlow第十步CNN BP 编程求解

    根据第九步学习的算法,解一CNN网络,在以前做的全连接层前增加一卷积层. 注意:在误差反馈计算过程中,用"FULL"卷积计算误差的传递.用"VALID"相关(t ...

  2. CNN表情识别系统制作(1)----fer2013人脸表情数据集简介

    fer2013人脸表情数据集简介 fer2013人脸表情数据集由35886张人脸表情图片组成,其中,测试图(Training)28708张,公共验证图(PublicTest)和私有验证图(Privat ...

  3. 走进tensorflow第十一步——tensorflow-gpu常见安装问题

    之前一直用的实验室的电脑,木有N卡,这次在自己的本本上整一下GPU版的tensorflow,配置不高,凑合着跑吧.. CUDA版本为9.0,在官网下载了相应的cuDNN,版本为7.5.1,具体的安装过 ...

  4. python与tensorflow实现人脸表情识别(基于CNN)

    使用fer2013数据集,卷积神经网络实现人脸表情识别 python与CNN实现,有GUI界面,支持摄像头实时识别和手动选取图片识别,GUI界面选取图片进行识别实现效果如下图 摄像头实时读取并识别表情 ...

  5. 人脸表情识别和情绪分类 | Python+TensorFlow(框架)+Keras+PyQt5

    人脸表情识别 | Python+Keras+PyQt5 参考学习文章: Keras|基于深度学习的人脸表情识别系统 PyQt5+QtDesigner编写摄像头界面程序(一)--pyqt5.qtdesi ...

  6. tensorflow机器学习之利用CNN卷积神经网络进行面部表情识别的实例代码

    本例通过 TensorFlow 构造卷积神经网络,做表情识别的测试. 输入数据可以从http://download.csdn.net/user/shinian1987上下载FER-2013 这个数据库 ...

  7. 基于tensorflow、CNN网络识别花卉的种类(图像识别)

    基于tensorflow.CNN网络识别花卉的种类 这是一个图像识别项目,基于 tensorflow,现有的 CNN 网络可以识别四种花的种类.适合新手对使用 tensorflow进行一个完整的图像识 ...

  8. tensorflow+python flask进行手写识别_python+flask搭建CNN在线识别手写中文网站!简直太屌了!...

    原标题:python+flask搭建CNN在线识别手写中文网站!简直太屌了! 使用python+flask搭建的一个网站,然后从网页的写字板上获取鼠标手写的汉字经过转码后传回后台,并经过图片裁剪处理之 ...

  9. 表情识别------CNN训练fer2013数据集

    目录 1.概述 2.环境 3.数据读取 4.VGG 5.Resnet 6.摄像头表情识别 1.概述 分别用vgg和resnet对fer2013做了训练,只是简单的实现,没有做什么其他改进方法,在测试集 ...

最新文章

  1. 如果卷积神经网络存在根本性的缺陷,你会怎么看?
  2. java中velocity定义宏标签_velocity自定义标签和指令(转:zwj)
  3. 大于等于符号_英语标点符号怎么读,这下全知道了!
  4. 带旋treap概念及模板,带例题:普通平衡树
  5. 我想要一种语言,只需对它说我要干什么就行
  6. Golang笔记——单元测试
  7. 【Vegas原创】xp_sendmail提示“邮件已发送”但收不到邮件的解决方法
  8. 模拟封装ajax,模拟jQ封装ajax,调用时出现Uncaught ReferenceError: param is
  9. c语言中专业英文词汇的意思,c语言常见专业英语词汇
  10. 转换句子的首字母为大小写(Jaden Casing Strings)
  11. 《原则》瑞·达利欧 --(五万字手敲笔记)
  12. 字节跳动 Java 岗一二三面全经过分享
  13. 【智能优化算法-鲸鱼算法】基于鲸鱼算法求解多目标优化问题附matlab代码(NSWOA)
  14. oracle中skimmer的意思,skimmer to是什么意思
  15. 那些牛逼互联网公司里技术团队的博客
  16. 什么是RAW文件系统?
  17. 规则引擎代码可视化编辑全梳理
  18. linux防火墙禁止所以端口,利用iptables来配置linux禁止所有端口登陆和开放指定端口...
  19. 希捷3.5吋固态混合硬盘京东商城火热促销
  20. Lock Mode Type 之 Optimistic 使用场景

热门文章

  1. Træfɪk入门教程
  2. Serverless 实战 —— 从 DevOps 到 Serverless
  3. linux 系统文件目录颜色及特殊权限对应的颜色
  4. java 课后习题 随机整数最大值和最小值
  5. 【静态站点(三)】之 Gridsome + Strapi + Vercel + Pm2 部署案例
  6. 【C语言】判断学生成绩等级
  7. “The server requested authentication method unknown to the client.”的解决方案
  8. C#LeetCode刷题之#415-字符串相加(Add Strings)
  9. 工作中,我们经常用到哪些SQL语句呢?
  10. 我学到的5件事,指导2,500名有抱负的开发人员