【发布时间】:2018-12-31 00:32:05
【问题描述】:
我试图重新训练 ResNet50 模型,以将给定的动物图像分类为 30 个不同的类别。为此,我制作了一个列表,其中包含给定维度图像的数组(在扩展维度并对其进行预处理之后):-(1、224、224、3),因此给定列表的形状(在将其转换为 numpy 数组之后)是(300, 1, 224, 224, 3),因为最初我只拍了 300 张图像。对于 Ytrain,我对类进行了标签编码,然后对类进行了热编码。对于 30 个类,我有一个维度为 (300, 30) 的 numpy 数组。然后我为model.fit_generator使用DataGenerator,传递形状为(1、224、224、3)的Xtrain和形状为(30,)的Ytrain,但得到了错误:-
ValueError: Error when checking target: expected fc1000 to have shape (30,) but got array with shape (1,)
这是我的代码:-
inputShape = (224, 224)
preprocess = imagenet_utils.preprocess_input
df = pd.read_csv('DLBeginner/meta-data/train.csv')
df = df.head(300)
imagesData, target = [], []
c = 0
for images in df['Image_id']:
filename = args["target"] + '/' + images
image = load_img(filename, target_size = inputShape)
image = img_to_array(image)
image = np.expand_dims(image, axis = 0)
image = preprocess(image)
imagesData.append(image)
c += 1
print('Count = {}, Image > {} '.format(c, images))
imagesData = np.array(imagesData)
labelEncoder = LabelEncoder()
series = df['Animal'][0:300]
integerEncoded = labelEncoder.fit_transform(series)
Hot = OneHotEncoder(sparse = False)
integerEncoded = integerEncoded.reshape(len(integerEncoded), 1)
oneHot = Hot.fit_transform(integerEncoded)
model = ResNet50(include_top = True, classes = 30, weights = None)
model.compile(optimizer = 'Adam', loss='categorical_crossentropy', metrics = ['accuracy'])
l = len(imagesData)
def DataGenerator(Xtrain, Ytrain):
while(True):
for i in range(l):
arr1 = Xtrain[i]
arr2 = Ytrain[i]
print("arr1.shape : {}".format(arr1.shape))
print("arr2.shape : {}".format(arr2.shape))
yield(arr1, arr2)
这里是“合适的部分”
generator = DataGenerator(imagesData, oneHot)
model.fit_generator(generator = generator, epochs = 5, steps_per_epoch=l)
我哪里错了? 提前致谢。
【问题讨论】:
标签: python-3.x keras deep-learning conv-neural-network