fer2013人脸表情识别代码
时间: 2023-07-30 22:07:28 浏览: 103
以下是一个简单的Python代码示例,用于在FER2013数据集上训练人脸表情识别模型:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 加载数据
df = pd.read_csv('fer2013.csv')
# 将数据拆分为训练、验证和测试集
train_data = df[df['Usage'] == 'Training']
val_data = df[df['Usage'] == 'PublicTest']
test_data = df[df['Usage'] == 'PrivateTest']
# 创建数据生成器
train_datagen = ImageDataGenerator(rescale=1./255,
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.1,
zoom_range=0.1,
horizontal_flip=True,
fill_mode='nearest')
val_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
# 定义批量大小和图像大小
batch_size = 32
img_size = (48, 48)
# 创建数据流
train_generator = train_datagen.flow_from_dataframe(train_data,
x_col='pixels',
y_col='emotion',
target_size=img_size,
batch_size=batch_size,
class_mode='categorical')
val_generator = val_datagen.flow_from_dataframe(val_data,
x_col='pixels',
y_col='emotion',
target_size=img_size,
batch_size=batch_size,
class_mode='categorical')
test_generator = test_datagen.flow_from_dataframe(test_data,
x_col='pixels',
y_col='emotion',
target_size=img_size,
batch_size=batch_size,
class_mode='categorical')
# 创建模型
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(48, 48, 1)),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(7, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
history = model.fit(train_generator,
steps_per_epoch=len(train_data) // batch_size,
epochs=50,
validation_data=val_generator,
validation_steps=len(val_data) // batch_size)
# 评估模型
test_loss, test_acc = model.evaluate(test_generator, verbose=2)
print('\nTest accuracy:', test_acc)
```
注意:这只是一个简单的示例,并不一定是最优的模型架构或超参数设置。对于FER2013数据集,还有很多其他的模型和技术可以尝试。