если x.shape не None и len (x.shape) == 1: AttributeError: у объекта 'str' нет атрибута 'shape' - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в глубоком обучении и строил программу, которая определяет человека по его имиджу. Но моя нейронная сеть показывает ошибку, и я понятия не имею, как ее исправить - "

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. "

Но это не помогло мне. В чем причина ошибки и как ее исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...