从文件夹访问10,000个.png图像文件时发生值错误

问题描述 投票:0回答:1

我正在尝试使用vgg16预训练网络训练大约10,000张图像的大数据,为此我对此进行了编码,但似乎会生成ValueError:太多值无法解包(预期2)。

路径=“ C:/用户/52/.spyder-py3/IAM/train_patches / *。png”

[(X_train,y_train),(X_test,y_test)=路径//这里发生错误

最初,当我只是使用它时,它只是在工作,但是现在当我在使用数据生成函数时,它却无法工作。请帮助我使此代码正确]

from keras.models import model_from_json
from keras.applications import VGG16
import numpy as np
import glob
import os
import keras
from keras.utils import to_categorical
from keras import backend as K
from PIL import Image
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from sklearn.model_selection import train_test_split
from keras import optimizers
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator


seed=10
np.random.seed(seed)

path= "C:/Users/52/.spyder-py3/IAM/train_patches/*.png"

(X_train,y_train),(X_test,y_test) = path   //The error is occurring here
sample_image = X_train[1,:,:,:]
plt.imshow(sample_image), plt.axis('off')
plt.show()
classes = 651
Y_train = to_categorical(y_train,classes)
Y_test = to_categorical(y_test,classes)

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')

X_train = X_train/255
X_test = X_test/255

img_rows, img_cols = 500,500
channels=3

#Include_top=False, Does not load the last two fully connected layers which act as the classifier.
#We are just loading the convolutional layers. 
vgg_conv = VGG16(weights='imagenet',include_top=False,input_shape=(img_rows,img_cols,3))

# freeze the layer except the last 4 layers
for layer in vgg_conv.layers[:-4]:
    layer.trainable=False
num_classes=10
model = Sequential() 
# Add the vgg convolutional base model
model.add(vgg_conv) 
# Add new layers
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
 # Show a summary of the model. Check the number of trainable parameters
model.summary()    
datagen = ImageDataGenerator(rotation_range=40,
                             width_shift_range=0.2,
                             height_shift_range=0.2,
                             zoom_range=0.2,   
                             horizontal_flip=True,
                             fill_mode='nearest')

datagen.fit(X_train)

print("Size is: ",X_train.shape[0])

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

#generator=datagen.flow(datagen.flow(X_train,Y_train,batch_size=128))

history = model.fit_generator(datagen.flow(X_train,Y_train,batch_size=128),
                              steps_per_epoch=X_train.shape[0]/128,
                              epochs = 2,
                              verbose=1)
acc = history.history['acc']
loss = history.history['loss']
epochs = range(len(acc))
score = model.evaluate(X_test, Y_test, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])   
plt.plot(epochs, acc, 'b', label='Training acc')
plt.title('Training accuracy')
plt.legend()
plt.show()
model_json = model.to_json()
open('C:/Users/52/.spyder-py3/IAM/imdata.json','w').write(model_json)
model.save_weights('C:/Users/52/.spyder-py3/IAM/imdata.h5',overwrite=True)
python tensorflow keras deep-learning
1个回答
0
投票

该错误表示您试图对4个变量进行赋值,但是=右边的函数仅输出两个。我认为这是因为您正在读取数据和标签,并进行培训/测试拆分。

尝试仅读取两个变量中的所有图像和标签,然后进行分割。

© www.soinside.com 2019 - 2024. All rights reserved.