1
이것은 Python의 Keras 코드입니다. 아래의 코드가 Linux mint에서 실행되면 모든 배치가 완료되지 않습니다. 그것은 항상Keras : 일괄 처리가 완료되지 않았습니다.
1/100 .............. ETA 30:00 Loss ..
2/100 =........... ETA 29:59 Loss ..
3/100 ==......... ETA 29:58 Loss ..
.
.
.
32/100 ==....... ETA 25:00 Loss ..
같은 32 배치에 중단 (교육이 알 수없는 이유로 중지)
하지만이 코드는 윈도우에서 실행되는 경우,이 100 배치 될 때까지 예상대로 작동합니다. 이 문제의 원인은 무엇입니까?
from __future__ import print_function
import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.layers.noise import AlphaDropout
from keras.preprocessing.image import ImageDataGenerator
from keras.models import model_from_json
from keras.layers import Dense, Dropout, Activation
from keras.preprocessing.text import Tokenizer
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os.path
f_log = './log'
f_model = './model/dogvscat'
model_yaml = 'dogvscat_model.yaml'
model_filename = 'dogvscat_model.json'
weights_filename = 'dogvscat_model_weights.hdf5'
batch_size = 64
epochs = 15
nb_validation_samples = 100
print('Building model...')
if os.path.isfile(os.path.join(f_model,model_filename)):
print('Saved parameters found. I will use this file...')
json_string = open(os.path.join(f_model, model_filename)).read()
model = model_from_json(json_string)
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.load_weights(os.path.join(f_model,weights_filename))
else:
print('Saved parameters Not found. Creating new model...')
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(128, 128, 3)))
model.add(Activation('selu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('selu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64, kernel_initializer='lecun_normal'))
model.add(Activation('selu'))
model.add(AlphaDropout(0.1))
model.add(Dense(2))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
train_datagen = ImageDataGenerator(
rescale=1.0/255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1.0/255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(128, 128),
batch_size=batch_size,
class_mode='categorical',
shuffle=True)
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(128, 128),
batch_size=batch_size,
class_mode='categorical',
shuffle=True)
tb_cb = keras.callbacks.TensorBoard(log_dir=f_log, histogram_freq=0)
cp_cb = keras.callbacks.ModelCheckpoint(filepath = os.path.join(f_model,weights_filename), monitor='val_loss', verbose=1, save_best_only=True, mode='auto')
cbks = [tb_cb, cp_cb]
history = model.fit_generator(
train_generator,
steps_per_epoch=nb_validation_samples,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples,
callbacks=cbks
)
score = model.evaluate_generator(validation_generator, nb_validation_samples)
print('')
print('Test score:', score[0])
print('Test accuracy:', score[1])
json_string = model.to_json()
open(os.path.join(f_model,model_filename), 'w').write(json_string)
yaml_string = model.to_yaml()
open(os.path.join(f_model,model_yaml), 'w').write(yaml_string)
print('save weights')
model.save_weights(os.path.join(f_model,weights_filename))
에 대한
사용 오류 "nb_training_samples는 diefined되지 않는다". 그래서 그것을 "nb_validation_samples"로 바꿨지 만 에포크 당 스텝 수는 2로 표시됩니다. 에포크 당 스텝 수는 nb_validation_samples (100과 같음)만큼 많지 않아야합니까? – lechiennp.ceil(nb_training_samples/batch_size)
단계를 필요로하므로 모든 샘플의 당신의 BATCH_SIZE 단계에아니요, 에포크 당 단계 수는 nb_training_samples/batch_size와 같습니다. 먼저 nb_training_samples를 계산해야합니다. –
신기원 당 단계 수를 오판했기 때문에 같을 수도 있습니다. 실제로 나는 클래스 당 2000 개의 샘플을 사용했고 64 개 (배치 크기) * 32 = 2048이므로 32 번째 단계에서 중단되었습니다. 고맙습니다!! – lechien