Я новичок в глубоком обучении и строил программу, которая определяет человека по его имиджу. Но моя нейронная сеть показывает ошибку, и я понятия не имею, как ее исправить - "
model.fit(imgs_array,Y,batch_size = 401, epochs = 2, validation_split = 0.2, sample_weight= None)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1527, in fit
x, y, sample_weights = self._standardize_user_data(
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 991, in _standardize_user_data
x, y, sample_weights = self._standardize_weights(x, y, sample_weight,
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1149, in _standardize_weights
y = training_utils.standardize_input_data(
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_utils.py", line 284, in standardize_input_data
data = [standardize_single_array(x) for x in data]
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_utils.py", line 284, in <listcomp>
data = [standardize_single_array(x) for x in data]
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_utils.py", line 218, in standardize_single_array
if x.shape is not None and len(x.shape) == 1:
AttributeError: 'str' object has no attribute 'shape'
'"
Мой полный код
import os
import numpy as np
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from sklearn.model_selection import train_test_split
from tensorflow.python import keras
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Dropout
folders = os.listdir('lfw/')
folders_a = np.asarray(folders)
X = []
Y = []
for folder in folders:
files = os.listdir('lfw/'+folder+'/') # type of files is a list
image_files.append(files)
for file in files:
X.append(file)
Y.append(folder)
# print(len(Y)) #13233
img_paths = []
for i in range(0,13233):
img_paths.append('lfw/'+Y[i]+'/'+X[i]) #img_paths is set now
print(len(img_paths))
i =0
imgs = []
for img_path in img_paths:
img_1 = load_img(img_path, color_mode="grayscale")
imgs.append(img_to_array(img_1))
print("executed",i)
i+=1
# print(imgs[0].shape) #(250,250,1)
#Building Neural Network
imgs_array = np.array(imgs)
imgs_array /= 255
model = Sequential()
model.add(Conv2D(20, kernel_size = 3, activation = 'relu', input_shape =(250,250,1)))
model.add(Conv2D(20, kernel_size =3, activation = 'relu'))
model.add(Flatten())
model.add(Dense(128, activation = 'relu'))
model.add(Dense(5749,activation = 'softmax')) #the number of people in dataset are 5749
model.compile(loss = keras.losses.categorical_crossentropy,optimizer = 'adam', metrics = ['accuracy'])
model.fit(imgs_array,Y,batch_size = 401, epochs = 2, validation_split = 0.2)
Документация keras гласит:
"sample_weight: необязательный Numpy массив весов для тренировочных выборок, используемый для взвешивания функции потерь (только во время обучения). Вы можете либо передать массив (1D) Numpy с той же длиной, что и входные выборки (отображение 1: 1 между весами и выборками), или в случае временных данных вы можете передать двумерный массив с формой (samples, sequence_length)
, чтобы применить различный вес к каждому временному шагу каждой выборки . В этом случае вы должны обязательно указать sample_weight_mode="temporal"
в compile (). Этот аргумент не поддерживается, когда генератор x или экземпляр Sequence вместо этого предоставляют sample_weights в качестве третьего элемента x. "
Но это не помогло мне. В чем причина ошибки и как ее исправить?