如果x.shape不是None并且len(x.shape)==1:AttributeError:'str'对象没有属性'shape'

2024-05-08 00:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个深度学习的初学者,正在构建一个程序,从形象上决定一个人。但我的神经网络出现了一个错误,我不知道如何修复它——”

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文件说

“样本权重:训练样本的可选权重Numpy数组,用于加权损失函数(仅在训练期间)。您可以传递与输入样本长度相同的平面(1D)Numpy数组(权重和样本之间的1:1映射),或者在时间数据的情况下,您可以传递形状为(samples, sequence_length)的2D数组。”,对每个样本的每个时间步应用不同的权重。在这种情况下,应确保在compile()中指定sample_weight_mode="temporal"。当x生成器或序列实例将样本权重作为x的第三个元素提供时,不支持此参数。”

但这对我没有帮助。 错误的原因是什么?如何修复


Tags: inimportimgdatamodeltensorflowtraininglibrary