将FER数据集使用Pickle处理-Python代码

之前写过一篇文章,是将FER2013数据集还原成灰度图像的Python代码,便于我们查看。

现在我想把它转换成pickle进行存储,这样便于读取和传输。

直接上代码就好了:

    def process_to_pickle(self):
        """
        将csv文件加工成pickle文件,方便存储和读取
        :return: None
        """
        # 创建文件夹
        if not os.path.exists(self.pickle_data_path): os.makedirs(self.pickle_data_path)
        # 读取csv数据
        with open(self.data_source) as f:
            train_x_data = []
            train_y_data = []
            test_x_data = []
            test_y_data = []
            validate_x_data = []
            validate_y_data = []
            # 打开文件夹
            data_csv = csv.reader(f)
            for (label, pixcels, usage) in data_csv:
                if usage == 'Training':
                    temp_list = []
                    for pixel in pixcels.split():
                        temp_list.append(pixel)
                    I = np.asarray(temp_list)
                    train_x_data.append(I.tolist())
                    train_y_data.append(label)
                elif usage == 'PrivateTest':
                    temp_list = []
                    for pixel in pixcels.split():
                        temp_list.append(pixel)
                    I = np.asarray(temp_list)
                    test_x_data.append(I.tolist())
                    test_y_data.append(label)
                elif usage == 'PublicTest':
                    temp_list = []
                    for pixel in pixcels.split():
                        temp_list.append(pixel)
                    I = np.asarray(temp_list)
                    validate_x_data.append(I.tolist())
                    validate_y_data.append(label)

            # 定义三个pickle文件
            train_pickle_file = open(os.path.join(self.pickle_data_path, 'train.txt'), 'wb')
            test_pickle_file = open(os.path.join(self.pickle_data_path, 'test.txt'), 'wb')
            validate_pickle_file = open(os.path.join(self.pickle_data_path, 'validate.txt'), 'wb')
            # 写入Pickle
            pickle.dump(train_x_data, train_pickle_file)
            pickle.dump(train_y_data, train_pickle_file)
            pickle.dump(test_x_data, test_pickle_file)
            pickle.dump(test_y_data, test_pickle_file)
            pickle.dump(validate_x_data, validate_pickle_file)
            pickle.dump(validate_y_data, validate_pickle_file)
            # 关闭文件
            train_pickle_file.close()
            test_pickle_file.close()
            validate_pickle_file.close()
            logging.info(msg='Save data finish!')

这段代码可以直接放到我的之前的文章:点这里 。里面写了一个类,直接放到里面就能够使用。

如果代码里有错误,欢迎大家指正!!

 

以下是一个简单的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数据集,还有很多其他的模型和技术可以尝试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值