如何在忘乎所以时察觉对方的情感变化

2023-12-18 18:40

本文主要是介绍如何在忘乎所以时察觉对方的情感变化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何在忘乎所以时察觉对方的情感变化

本项目用于对表情进行识别,可以利用表情来察觉情感。

一、项目背景

在学习了微表情心理学后,认识到读懂表情对认识一个人的情感变化的意义,从而诞生了做这一项目的想法。

载入所需库

import paddle
import numpy as np
import cv2
from paddle.vision.models import resnet50
from paddle.vision.datasets import DatasetFolder
import matplotlib.pylab as plt
import os

定义参数

train_file='train'
valid_file='valid'
test_file='test'
imagesize=32
batch_size=32
lr=1e-5

二、数据集介绍

本项目用fer2013数据集,事先数据集已完成对训练集和验证集的切分,同时已将不同表情放于不同文件夹中。具体表情对应的标签和中英文如下:0 anger 生气; 1 disgust 厌恶; 2 fear 恐惧; 3 happy 开心; 4 sad 伤心;5 surprised 惊讶; 6 normal 中性。

1.解压数据集

!unzip -oq /home/aistudio/work/image/fer2013.zip

2.对数据加载进行预处理

# 定义数据预处理
def load_image(img_path):img = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB)#resizeimg = cv2.resize(img,(imagesize,imagesize))img = np.array(img).astype('float32')# HWC to CHW img = img.transpose((2,0,1))#Normalizeimg = img / 255         return img# 构建Dataset
class Face(DatasetFolder):def __init__(self, path):super().__init__(path)def __getitem__(self, index):img_path, label = self.samples[index]label = np.array(label).astype(np.int64)return load_image(img_path), labeltrain_dataset = Face(train_file)
eval_dataset = Face(valid_file)

3.对数据集查看

plt.figure(figsize=(15, 15))
for i in range(5):fundus_img, lab = train_dataset.__getitem__(i)plt.subplot(2, 5, i+1)plt.imshow(fundus_img.transpose(1, 2, 0))plt.axis("off")print(lab)

三、模型选择和开发

选择了resnet50,又用了两个全连接层,然后输出。

1.模型组网

class Network(paddle.nn.Layer):def __init__(self):super(Network, self).__init__()self.resnet = resnet50(pretrained=True, num_classes=0)  self.flatten = paddle.nn.Flatten()self.linear_1 = paddle.nn.Linear(2048, 512)self.linear_2 = paddle.nn.Linear(512, 256)self.linear_3 = paddle.nn.Linear(256, 8)self.relu = paddle.nn.ReLU()self.dropout = paddle.nn.Dropout(0.2)def forward(self, inputs):# print('input', inputs)y = self.resnet(inputs)y = self.flatten(y)y = self.linear_1(y)y = self.linear_2(y)y = self.relu(y)y = self.dropout(y)y = self.linear_3(y)y = paddle.nn.functional.sigmoid(y)return y

2.实例化模型和模型可视化

inputs = paddle.static.InputSpec(shape=[None, 3, 32, 32], name='inputs')
labels = paddle.static.InputSpec(shape=[None, 2], name='labels')model = paddle.Model(Network(), inputs, labels)
paddle.summary(Network(), (1, 3, 32, 32))
-------------------------------------------------------------------------------Layer (type)         Input Shape          Output Shape         Param #    
===============================================================================Conv2D-54        [[1, 3, 32, 32]]     [1, 64, 16, 16]         9,408     BatchNorm2D-54     [[1, 64, 16, 16]]     [1, 64, 16, 16]          256      ReLU-19        [[1, 64, 16, 16]]     [1, 64, 16, 16]           0       MaxPool2D-2      [[1, 64, 16, 16]]      [1, 64, 8, 8]            0       Conv2D-56        [[1, 64, 8, 8]]       [1, 64, 8, 8]          4,096     BatchNorm2D-56      [[1, 64, 8, 8]]       [1, 64, 8, 8]           256      ReLU-20         [[1, 256, 8, 8]]      [1, 256, 8, 8]           0       Conv2D-57        [[1, 64, 8, 8]]       [1, 64, 8, 8]         36,864     BatchNorm2D-57      [[1, 64, 8, 8]]       [1, 64, 8, 8]           256      Conv2D-58        [[1, 64, 8, 8]]       [1, 256, 8, 8]        16,384     BatchNorm2D-58      [[1, 256, 8, 8]]      [1, 256, 8, 8]         1,024     Conv2D-55        [[1, 64, 8, 8]]       [1, 256, 8, 8]        16,384     BatchNorm2D-55      [[1, 256, 8, 8]]      [1, 256, 8, 8]         1,024     
BottleneckBlock-17    [[1, 64, 8, 8]]       [1, 256, 8, 8]           0       Conv2D-59        [[1, 256, 8, 8]]      [1, 64, 8, 8]         16,384     BatchNorm2D-59      [[1, 64, 8, 8]]       [1, 64, 8, 8]           256      ReLU-21         [[1, 256, 8, 8]]      [1, 256, 8, 8]           0       Conv2D-60        [[1, 64, 8, 8]]       [1, 64, 8, 8]         36,864     BatchNorm2D-60      [[1, 64, 8, 8]]       [1, 64, 8, 8]           256      Conv2D-61        [[1, 64, 8, 8]]       [1, 256, 8, 8]        16,384     BatchNorm2D-61      [[1, 256, 8, 8]]      [1, 256, 8, 8]         1,024     
BottleneckBlock-18    [[1, 256, 8, 8]]      [1, 256, 8, 8]           0       Conv2D-62        [[1, 256, 8, 8]]      [1, 64, 8, 8]         16,384     BatchNorm2D-62      [[1, 64, 8, 8]]       [1, 64, 8, 8]           256      ReLU-22         [[1, 256, 8, 8]]      [1, 256, 8, 8]           0       Conv2D-63        [[1, 64, 8, 8]]       [1, 64, 8, 8]         36,864     BatchNorm2D-63      [[1, 64, 8, 8]]       [1, 64, 8, 8]           256      Conv2D-64        [[1, 64, 8, 8]]       [1, 256, 8, 8]        16,384     BatchNorm2D-64      [[1, 256, 8, 8]]      [1, 256, 8, 8]         1,024     
BottleneckBlock-19    [[1, 256, 8, 8]]      [1, 256, 8, 8]           0       Conv2D-66        [[1, 256, 8, 8]]      [1, 128, 8, 8]        32,768     BatchNorm2D-66      [[1, 128, 8, 8]]      [1, 128, 8, 8]          512      ReLU-23         [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-67        [[1, 128, 8, 8]]      [1, 128, 4, 4]        147,456    BatchNorm2D-67      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      Conv2D-68        [[1, 128, 4, 4]]      [1, 512, 4, 4]        65,536     BatchNorm2D-68      [[1, 512, 4, 4]]      [1, 512, 4, 4]         2,048     Conv2D-65        [[1, 256, 8, 8]]      [1, 512, 4, 4]        131,072    BatchNorm2D-65      [[1, 512, 4, 4]]      [1, 512, 4, 4]         2,048     
BottleneckBlock-20    [[1, 256, 8, 8]]      [1, 512, 4, 4]           0       Conv2D-69        [[1, 512, 4, 4]]      [1, 128, 4, 4]        65,536     BatchNorm2D-69      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      ReLU-24         [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-70        [[1, 128, 4, 4]]      [1, 128, 4, 4]        147,456    BatchNorm2D-70      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      Conv2D-71        [[1, 128, 4, 4]]      [1, 512, 4, 4]        65,536     BatchNorm2D-71      [[1, 512, 4, 4]]      [1, 512, 4, 4]         2,048     
BottleneckBlock-21    [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-72        [[1, 512, 4, 4]]      [1, 128, 4, 4]        65,536     BatchNorm2D-72      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      ReLU-25         [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-73        [[1, 128, 4, 4]]      [1, 128, 4, 4]        147,456    BatchNorm2D-73      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      Conv2D-74        [[1, 128, 4, 4]]      [1, 512, 4, 4]        65,536     BatchNorm2D-74      [[1, 512, 4, 4]]      [1, 512, 4, 4]         2,048     
BottleneckBlock-22    [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-75        [[1, 512, 4, 4]]      [1, 128, 4, 4]        65,536     BatchNorm2D-75      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      ReLU-26         [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-76        [[1, 128, 4, 4]]      [1, 128, 4, 4]        147,456    BatchNorm2D-76      [[1, 128, 4, 4]]      [1, 128, 4, 4]          512      Conv2D-77        [[1, 128, 4, 4]]      [1, 512, 4, 4]        65,536     BatchNorm2D-77      [[1, 512, 4, 4]]      [1, 512, 4, 4]         2,048     
BottleneckBlock-23    [[1, 512, 4, 4]]      [1, 512, 4, 4]           0       Conv2D-79        [[1, 512, 4, 4]]      [1, 256, 4, 4]        131,072    BatchNorm2D-79      [[1, 256, 4, 4]]      [1, 256, 4, 4]         1,024     ReLU-27        [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-80        [[1, 256, 4, 4]]      [1, 256, 2, 2]        589,824    BatchNorm2D-80      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     Conv2D-81        [[1, 256, 2, 2]]     [1, 1024, 2, 2]        262,144    BatchNorm2D-81     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     Conv2D-78        [[1, 512, 4, 4]]     [1, 1024, 2, 2]        524,288    BatchNorm2D-78     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     
BottleneckBlock-24    [[1, 512, 4, 4]]     [1, 1024, 2, 2]           0       Conv2D-82       [[1, 1024, 2, 2]]      [1, 256, 2, 2]        262,144    BatchNorm2D-82      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     ReLU-28        [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-83        [[1, 256, 2, 2]]      [1, 256, 2, 2]        589,824    BatchNorm2D-83      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     Conv2D-84        [[1, 256, 2, 2]]     [1, 1024, 2, 2]        262,144    BatchNorm2D-84     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     
BottleneckBlock-25   [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-85       [[1, 1024, 2, 2]]      [1, 256, 2, 2]        262,144    BatchNorm2D-85      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     ReLU-29        [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-86        [[1, 256, 2, 2]]      [1, 256, 2, 2]        589,824    BatchNorm2D-86      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     Conv2D-87        [[1, 256, 2, 2]]     [1, 1024, 2, 2]        262,144    BatchNorm2D-87     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     
BottleneckBlock-26   [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-88       [[1, 1024, 2, 2]]      [1, 256, 2, 2]        262,144    BatchNorm2D-88      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     ReLU-30        [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-89        [[1, 256, 2, 2]]      [1, 256, 2, 2]        589,824    BatchNorm2D-89      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     Conv2D-90        [[1, 256, 2, 2]]     [1, 1024, 2, 2]        262,144    BatchNorm2D-90     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     
BottleneckBlock-27   [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-91       [[1, 1024, 2, 2]]      [1, 256, 2, 2]        262,144    BatchNorm2D-91      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     ReLU-31        [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-92        [[1, 256, 2, 2]]      [1, 256, 2, 2]        589,824    BatchNorm2D-92      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     Conv2D-93        [[1, 256, 2, 2]]     [1, 1024, 2, 2]        262,144    BatchNorm2D-93     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     
BottleneckBlock-28   [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-94       [[1, 1024, 2, 2]]      [1, 256, 2, 2]        262,144    BatchNorm2D-94      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     ReLU-32        [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-95        [[1, 256, 2, 2]]      [1, 256, 2, 2]        589,824    BatchNorm2D-95      [[1, 256, 2, 2]]      [1, 256, 2, 2]         1,024     Conv2D-96        [[1, 256, 2, 2]]     [1, 1024, 2, 2]        262,144    BatchNorm2D-96     [[1, 1024, 2, 2]]     [1, 1024, 2, 2]         4,096     
BottleneckBlock-29   [[1, 1024, 2, 2]]     [1, 1024, 2, 2]           0       Conv2D-98       [[1, 1024, 2, 2]]      [1, 512, 2, 2]        524,288    BatchNorm2D-98      [[1, 512, 2, 2]]      [1, 512, 2, 2]         2,048     ReLU-33        [[1, 2048, 1, 1]]     [1, 2048, 1, 1]           0       Conv2D-99        [[1, 512, 2, 2]]      [1, 512, 1, 1]       2,359,296   BatchNorm2D-99      [[1, 512, 1, 1]]      [1, 512, 1, 1]         2,048     Conv2D-100        [[1, 512, 1, 1]]     [1, 2048, 1, 1]       1,048,576   BatchNorm2D-100    [[1, 2048, 1, 1]]     [1, 2048, 1, 1]         8,192     Conv2D-97       [[1, 1024, 2, 2]]     [1, 2048, 1, 1]       2,097,152   BatchNorm2D-97     [[1, 2048, 1, 1]]     [1, 2048, 1, 1]         8,192     
BottleneckBlock-30   [[1, 1024, 2, 2]]     [1, 2048, 1, 1]           0       Conv2D-101       [[1, 2048, 1, 1]]      [1, 512, 1, 1]       1,048,576   BatchNorm2D-101     [[1, 512, 1, 1]]      [1, 512, 1, 1]         2,048     ReLU-34        [[1, 2048, 1, 1]]     [1, 2048, 1, 1]           0       Conv2D-102        [[1, 512, 1, 1]]      [1, 512, 1, 1]       2,359,296   BatchNorm2D-102     [[1, 512, 1, 1]]      [1, 512, 1, 1]         2,048     Conv2D-103        [[1, 512, 1, 1]]     [1, 2048, 1, 1]       1,048,576   BatchNorm2D-103    [[1, 2048, 1, 1]]     [1, 2048, 1, 1]         8,192     
BottleneckBlock-31   [[1, 2048, 1, 1]]     [1, 2048, 1, 1]           0       Conv2D-104       [[1, 2048, 1, 1]]      [1, 512, 1, 1]       1,048,576   BatchNorm2D-104     [[1, 512, 1, 1]]      [1, 512, 1, 1]         2,048     ReLU-35        [[1, 2048, 1, 1]]     [1, 2048, 1, 1]           0       Conv2D-105        [[1, 512, 1, 1]]      [1, 512, 1, 1]       2,359,296   BatchNorm2D-105     [[1, 512, 1, 1]]      [1, 512, 1, 1]         2,048     Conv2D-106        [[1, 512, 1, 1]]     [1, 2048, 1, 1]       1,048,576   BatchNorm2D-106    [[1, 2048, 1, 1]]     [1, 2048, 1, 1]         8,192     
BottleneckBlock-32   [[1, 2048, 1, 1]]     [1, 2048, 1, 1]           0       
AdaptiveAvgPool2D-2  [[1, 2048, 1, 1]]     [1, 2048, 1, 1]           0       ResNet-2         [[1, 3, 32, 32]]     [1, 2048, 1, 1]           0       Flatten-2       [[1, 2048, 1, 1]]        [1, 2048]              0       Linear-4           [[1, 2048]]            [1, 512]          1,049,088   Linear-5            [[1, 512]]            [1, 256]           131,328    ReLU-36            [[1, 256]]            [1, 256]              0       Dropout-2           [[1, 256]]            [1, 256]              0       Linear-6            [[1, 256]]             [1, 8]             2,056     
===============================================================================
Total params: 24,743,624
Trainable params: 24,637,384
Non-trainable params: 106,240
-------------------------------------------------------------------------------
Input size (MB): 0.01
Forward/backward pass size (MB): 5.39
Params size (MB): 94.39
Estimated Total Size (MB): 99.79
-------------------------------------------------------------------------------
{'total_params': 24743624, 'trainable_params': 24637384}

3.模型训练

# 模型训练相关配置,准备损失计算方法,优化器和精度计算方法
model.prepare(paddle.optimizer.Adam(learning_rate=lr, parameters=model.parameters()),paddle.nn.CrossEntropyLoss(),paddle.metric.Accuracy())# 模型训练model.fit(train_data=train_dataset,     #训练数据集eval_data=eval_dataset,         #测试数据集batch_size=batch_size,          #一个批次的样本数量epochs=27,                      #迭代轮次save_dir="/home/aistudio/lup", #把模型参数、优化器参数保存至自定义的文件夹save_freq=3,                  #设定每隔多少个epoch保存模型参数及优化器参数 verbose=1                )
step 898/898 [==============================] - loss: 1.8075 - acc: 0.2449 - 53ms/step         
save checkpoint at /home/aistudio/lup/0
Eval begin...
step 113/113 [==============================] - loss: 1.7850 - acc: 0.2530 - 23ms/step        
Eval samples: 3589

4.模型评估测试

model.evaluate(eval_dataset, batch_size=5, verbose=1)
Eval begin...
step 718/718 [==============================] - loss: 1.9499 - acc: 0.4870 - 22ms/step         
Eval samples: 3589
{'loss': [1.9498544], 'acc': 0.48704374477570356}

四、预测

1.对预测数据处理

def load_test(img_path):   img = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB)#resizeimg = cv2.resize(img,(imagesize,imagesize))img = np.array(img).astype('float32')# HWC to CHW img = img.transpose((2,0,1))img = np.expand_dims(img, axis=0)#Normalizeimg = img / 255         return imgtest_dataset=[]
for i in os.listdir(test_file):test_dataset.append(load_test(test_file+'//'+i))

2.对模型预测

# 进行预测操作
result = model.predict(test_dataset)# 定义产出数字与表情的对应关系
face={0:'anger',1:'disgust',2:'fear',3:'happy',4:'sad',5:'surprised',6:'normal'}# 定义画图方法
def show_img(img, predict):plt.figure()plt.title('predict: {}'.format(face[predict]))plt.imshow(img.reshape([3, 32, 32]).transpose(1,2,0))plt.show()# 抽样展示
indexs = [4, 15, 45,]for idx in indexs:show_img(test_dataset[idx][0], np.argmax(result[0][idx]))
Predict begin...
step 3589/3589 [==============================] - 21ms/step         
Predict samples: 3589

五、效果展示

五、总结与升华

1.在图像分类中输出数要大于所分图像类数。

2.对于维度缺失问题可以用img = np.expand_dims(img, axis=0)增加维度。

六、个人介绍

太原理工大学 软件学院 软件工程专业 2020级 本科生 王志洲

AIstudio地址链接:https://aistudio.baidu.com/aistudio/personalcenter/thirdview/559770

码云地址链接:https://gitee.com/wang-zhizhou_1

这篇关于如何在忘乎所以时察觉对方的情感变化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/509407

相关文章

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

深度剖析AI情感陪伴类产品及典型应用 Character.ai

前段时间AI圈内C.AI的受够风波可谓是让大家都丈二摸不着头脑,连C.AI这种行业top应用都要找谋生方法了!投资人摸不着头脑,用户们更摸不着头脑。在这之前断断续续玩了一下这款产品,这次也是乘着这个风波,除了了解一下为什么这么厉害的创始人 Noam Shazeer 也要另寻他路,以及产品本身的发展阶段和情况! 什么是Character.ai? Character.ai官网:https://

基于人工智能的音乐情感分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 音乐情感分类是通过对音乐音频信号进行分析,识别出音乐传递的情感,如“愉快”、“悲伤”、“愤怒”等。该技术在音乐推荐、情感分析、电影配乐等领域具有广泛的应用。本文将介绍如何构建一个基于人工智能的音乐情感分类系统,包括环境准备、系统设计及代码实现。 2. 项

2409atl,atl3.0到7.0的变化

原文 本文不介绍新的ATL7服务器类和属性.这不是一个完整的列表,只是我目前找到的. 串 串转换宏有一些限制.它从栈中分配内存,可能会在大串时溢出栈.函数退出时,释放该串,而不是在函数内引入的域内释放. 它使用过时OLE2ANSI定义.如果你查看MSDN上对_alloca(来转换)的注意,它说它在SEH或C++EH中使用时有限制. 如,看一下ATL3的串转换宏: USES_CONVER

包拯断案 | 数据库从库GTID在变化 为何没有数据写入@还故障一个真相

提问:作为DBA运维的你是否遇到过这些烦恼 1、数据库从库复制链路如何正确配置表过滤信息? 2、数据库从库的GTID在变化,实际却没有数据写入,究竟是什么原因? 心中有章,遇事不慌 作为DBA的你,遇到问题无从下手,除了在问题面前徘徊,还能如何选择?如果你一次或多次遇到该问题还是 无法解决,又很懊恼,该如何排忧呢?关注公众号,关注《包拯断案》专栏,让小编为你排忧解难~ #包拯秘籍#

2020年SEO行业发展变化和趋势分析!

一、搜索引擎算法发展轨迹 第一阶段:人工目录(1997年-2001年“雅虎早期搜索模式”); 第二阶段:文本分析(2001年-2004年“以关键词和背景颜色一样,堆积大量关键词,就会有非常好的排名; 第三阶段:链接分析(2004年-2009年“以反向链接为核心算法的阶段”),这时行业内有句话是内容为王,外链为皇; 第四阶段:智能分析(2009年-现在“以满足用户人性化需求的用户浏览行为分析