• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

callback 문제로 질문 드립니다.

22.01.26 15:26 작성 조회수 368

0

import urllib.request
import zipfile
import tensorflow.keras as keras

url = 'https://storage.googleapis.com/download.tensorflow.org/data/rps.zip'
urllib.request.urlretrieve(url, 'rps.zip')
local_zip = 'rps.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('tmp/')
zip_ref.close()


def image_generator():
TRAIN_DIR = 'tmp/rps'
training_datagen = keras.preprocessing.image.ImageDataGenerator(rescale=1. / 255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest',
validation_split=0.2)
training_generator = training_datagen.flow_from_directory(TRAIN_DIR,
target_size=(128, 128),
batch_size=150,
class_mode='categorical',
subset='training')

validation_generator = training_datagen.flow_from_directory(TRAIN_DIR,
target_size=(128, 128),
batch_size=150,
class_mode='categorical',
subset='validation')

return training_generator, validation_generator


model = keras.models.Sequential([
keras.layers.Conv2D(64, (3, 3), activation='relu', input_shape=(150, 150, 3)),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Conv2D(32, (3, 3), activation='relu'),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Conv2D(16, (3, 3), activation='relu'),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Flatten(),
keras.layers.Dropout(0.5),
keras.layers.Dense(512, activation='relu'),
keras.layers.Dense(3, activation='softmax')
])

model.compile(optimizer=keras.optimizers.Adam(),
loss=keras.losses.sparse_categorical_crossentropy,
metrics='acc')


checkpoint_path = 'models/my_checkpoint.ckpt'
checkpoint = keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
save_best_only=True,
save_weights_only=True,
monitor='val_loss',
verbose=1)


train, val = image_generator()

model.fit(train,
epochs=10,
validation_data=(val),
steps_per_epoch=len(train),
validation_steps=len(val),
callbacks=[checkpoint])

model.load_weights(checkpoint_path)

 

 

 

tensorflow.python.framework.errors_impl.InvalidArgumentError:  Input to reshape is a tensor with 470400 values, but the requested shape requires a multiple of 4624

[[node sequential/flatten/Reshape (defined at /Users/resot/PycharmProjects/TensorProject/imageclassification_cnn.py:72) ]] [Op:__inference_train_function_874]

 

Function call stack:

train_function

실습자료를 하던 중

callback에서 걸려서 이런 오류가 뜹니다.

폴더와 파일생성은 모두 되었습니다.

flatten에서 reshape를 해줘야 하는건가요? 

강의자료와 코드를 비교해보아도 알 수 없어 질문을 드립니다.

답변 2

·

답변을 작성해보세요.

1

안녕하세요? 강의자 이경록입니다.

 

먼저 해당 오류에 대해서는 작성하신 전체 코드를 봐야 상세한 답변이 가능합니다.

teddylee777@gmail.com 로 작성하신 colab 파일의 링크를 공유해 주시면 답변 드리겠습니다.

아울러 본 강의를 수강하시는 모든 분들은 슬랙 가입을 요청 드리고 있습니다.

슬랙 채널에서 질문과 답변을 실시간으로 드리고 있으며

슬랙에서 문의시 가장 빠르게 답변 드리고 있습니다.

 

감사합니다.

0

김재령님의 프로필

김재령

질문자

2022.01.26

loss의 문제였습니다. 답변해드려서 감사합니다.