【发布时间】:2021-08-14 23:14:08
【问题描述】:
我正在创建一个人工智能机器来识别情绪,但是我不断收到以下错误。任何帮助表示赞赏!
张量流版本:2.5
Traceback(最近一次调用最后一次):
File "c:\Users\HK School\moodRecog\secondversion.py", line 33, in <module>
model.fit(trainingImages, trainingEmotions, epochs=10)
File "C:\Users\HK School\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1133, in fit
data_handler = data_adapter.get_data_handler(
File "C:\Users\HK School\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 1364, in get_data_handler
return DataHandler(*args, **kwargs)
File "C:\Users\HK School\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 1152, in __init__
adapter_cls = select_data_adapter(x, y)
File "C:\Users\HK School\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 991, in select_data_adapter
raise ValueError(
ValueError: Failed to find data adapter that can handle input: (<class 'list'>
containing values of types {"<class 'numpy.ndarray'>"}), (<class 'list'> containing values of types {"<class 'str'>"})
代码(文件 1):
# Mood Recognition AI Project
#import required libraries
import copy
import numpy as np
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import pandas as pd
classifiedEmotions = ["Angry", "Disgust", "Fear", "Happy", "Sad", "Surprise", "Neutral"]
#load data into Python
rawData = pd.read_csv("C:/Users/HK School/OneDrive/Desktop/Face-Recognition-Dataset/test-set.csv")
#split training data and testing data
#take training data from dataset
grouped = rawData.groupby(rawData.usage)
trainingData = grouped.get_group("Training")
#take testing data from dataset
testingData = rawData.loc[rawData["usage"] != "Training"]
#split pixel values and emotions for training and testing data
#take pixel values for images & emotions from training dataset
trainingImages = trainingData[["pixels"]].values.tolist()
trainingEmotions = trainingData[["emotion"]].values.tolist()
#take pixel values for images & emotions from testing dataset
testingImages = testingData[["pixels"]].values.tolist()
testingEmotions = testingData[["emotion"]].values.tolist()
#clean up data into organized lists containing numerical values
def splitList(imageDataset):
newData = []
for i in range(len(imageDataset)):
imgRawVal = imageDataset[i]
# print(imgRawVal)
for j in range(len(imgRawVal)):
imgSplitVal = imgRawVal[j].split(" ")
newData.append(imgSplitVal)
pixeledImage = np.array(newData, 'float64')/255
for k in range(len(newData)):
imageIn2D = pixeledImage[k].reshape(48,48)
newData[k] = imageIn2D
return newData
testingImages = splitList(testingImages)
trainingImages = splitList(trainingImages)
def convertToImages(imagesDataset):
for i in range(len(imagesDataset)):
plt.imshow(imagesDataset[i], cmap= "gray", interpolation="nearest")
plt.axis("off")
plt.show()
convertToImages(testingImages)
convertToImages(trainingImages)
def splitLabels(emotionDataset):
newList = []
for i in range(len(emotionDataset)):
newList.append(emotionDataset[i][0])
return newList
trainingEmotions = splitLabels(trainingEmotions)
testingEmotions = splitLabels(testingEmotions)
def classifyEmotions(emotionDataset):
for i in range(len(emotionDataset)):
emotionDataset[i] = classifiedEmotions[emotionDataset[i]]
return emotionDataset
classifiedTrainingEmotions = classifyEmotions(trainingEmotions)
# print(classifiedTrainingEmotions)
# print(testingEmotions)
print(testingImages)
import pickle
f = open("data.pickle", "wb")
pickle.dump({"testingImages": testingImages, "trainingImages": trainingImages,"testingEmotions": testingEmotions, "trainingEmotions": trainingEmotions}, f)
f.close()
代码(文件 2):
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pickle
file = open("data.pickle", "rb")
completeValues = pickle.load(file)
file.close()
# print(completeValues)
testingImages = completeValues['testingImages']
trainingImages = completeValues['trainingImages']
trainingEmotions = completeValues['trainingEmotions']
testingEmotions = completeValues['testingEmotions']
classifiedEmotions = ["Angry", "Disgust", "Fear", "Happy", "Sad", "Surprise", "Neutral"]
def classifyEmotions(emotionDataset):
for i in range(len(emotionDataset)):
emotionDataset[i] = classifiedEmotions[emotionDataset[i]]
return emotionDataset
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(48, 48)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(7)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(trainingImages, trainingEmotions, epochs=10)
需要注意的是,我使用了 FER 2013 数据集并使用了 2 个文件来减少总时间(每次运行代码时都不需要更改数据)。
【问题讨论】:
-
您应该将 NumPy 数组提供给
model.fit()。使用np.array()将trainingImages和trainingEmotions分别转换为ndarray。 -
哦!谢谢,这就是问题:)
-
我已添加评论作为答案。如果对你有帮助,请采纳,以便其他开发者使用。
标签: python tensorflow machine-learning keras face-recognition