我在两个文件夹中有约1400张图像,其中文件夹名称是图像的标签。我遍历每个文件夹,并将其与标签一起添加到数组中。后来我将其传递给我的神经网络模型。
for folder in files:
sdir = dir + "\\"
sdir = sdir + folder
print("inside loop " +sdir)
count = 0
for image in os.listdir(sdir):
img = cv2.imread(image)
count = count + 1
if count <= 450:
x_train.append(img)
y_train.append(folder)
else:
x_test.append(img)
y_test.append(folder)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))
Traceback (most recent call last):
File "testing.py", line 43, in <module>
model.fit(x_train,y_train, epochs=5)
File "C:\Python\lib\site-packages\tensorflow\python\keras\engine\training.py", line 776, in fit
shuffle=shuffle)
File "C:\Python\lib\site-packages\tensorflow\python\keras\engine\training.py", line 2266, in _standardize_user_data
'array or a list of arrays. You passed: x=' + str(x))
ValueError: Please provide as model inputs either a single array or a list of arrays.
答案 0 :(得分:0)
我认为您的问题是由于files
可能是一个字符串列表,因此folder
(您作为标签传递给网络)是一个字符串,而网络将需要整数标签。
因此,根据您拥有的标签数量(两个,如果我理解正确的话),您可以定义一个词典
labels_to_ints = dict(zip(files,[0,1]))
将字符串映射到整数标签,然后使用
代替y_train.append(folder)
y_train.append(labels_to_ints[folder])
(并对应于y_test
)。
当然,还有其他方法可以执行此映射。