Keras로 신경망에 데이터를 '전송'하려고합니다. .flow_from_directory 메소드를 사용하고 있는데이 프로세스는 나에게 적합합니다. 나는 (내가 tensorflow을 사용하고 있습니다)을 keras 문서에서 기본 예제를 사용하고 있습니다 :ImageDataGenerator로 Keras 차원이 일치하지 않습니다.
ROWS = 64
COLS = 64
CHANNELS = 3
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'train',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'../tutorial/l1/kaggle_solutions/dogs_vs_cats/valid',
target_size=(64, 64),
batch_size=1,
class_mode='binary')
from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import Dense, Activation, Flatten, Dropout, MaxPooling2D
from keras.regularizers import l2
model = Sequential()
model.add(Convolution2D(4, 4, 4, border_mode='same', input_shape=(64, 64,3), activation='relu'))
from keras.utils.np_utils import to_categorical
from keras.optimizers import SGD, RMSprop
model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=1e-4), metrics=['accuracy'])
model.fit_generator(
train_generator,
samples_per_epoch=2500,
nb_epoch=20,
validation_data=validation_generator,
nb_val_samples=3100)
이 내가 다음과 같은 오류가 실행 : 나는 오랜 시간과 발견을 위해 주변에 땜질 된
Exception: Error when checking model target: expected convolution2d_84 to have 4 dimensions, but got array with shape (32, 1)
다음과 같이 'model.add'를 그레이 스케일 입력으로 바꿈 model.add (Convolution2D (4, 4, 4, border_mode = '동일', input_shape = (64, 64,3), 활성화 = 'relu')) 은 다음과 같은 오류를 표시합니다 (예상대로 - 원래 입력이 맞았 음을 나타냄) :
Error when checking model input: expected convolution2d_input_49 to have shape (None, 64, 64, 1) but got array with shape (32, 64, 64, 3)
그래서 원본과 32,64,64,3의 4-d 배열을 전달하지만 원래 의미하는 오류가 발생합니다 예상 (1,64,64, 3) and got (32,64,64,3)
데이터를 32 개 배치로 보내고 있습니다. 배치를 0으로 설정하면 이상하게도 충분합니다 (0,64,64,3 입력을 제공함). 그 BATCH_SIZE (fit_generator를 사용할 때 내가 모델에 배치 크기를 통과 할 수 있으며이 나타납니다 - 문서를 바탕으로
이Exception: Error when checking model target: expected convolution2d_87 to have 4 dimensions, but got array with shape (0, 1)
, 내가 모델로 데이터 흐름하는 적절한 방법을 알아낼 수 없습니다 : 수 넘버 샘플) 문제입니다.
도움을 주시면 감사하겠습니다.
그게 아마 좋은 점은 내가 (내가 말했듯이, 나는 매우 실망했다) 내 그물의 내 상위 레이어를 찢어했고 그냥 확인했다. 결국, 나는 "제너레이터"를 "바이너리"에서 "카테고리"로 전환하고 커널을 다시 시작해야했다. 심지어 지금은 바이너리가 작동하지 않습니다 -하지만 당신이 올바르게 입력 된 모양과 관련이 있다고 제안했다. 나는이 대답을 "받아 들일"것이지만, 문제의 레이블 이었지만 그것이 "입력"이었다. 나는 당신이 이것에 대해 조사해 주셔서 대단히 감사합니다. fit_generator 예제가 많지 않습니다. 내 예를 기다리는 딸랑 딸랑이있다. – RDS