Moo*_*dra 3 python neural-network deep-learning keras
我正在使用ImageDataGenerator和flow_from_directory生成我的数据,并使用model.fit_generator来拟合数据。
默认情况下,仅输出训练数据集的准确性。似乎没有选择将验证准确性输出到终端。
这是我的代码的相关部分:
#train data generator
print('Starting Preprocessing')
train_datagen = ImageDataGenerator(preprocessing_function = preprocess)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size = (img_height, img_width),
batch_size = batch_size,
class_mode = 'categorical') #class_mode = 'categorical'
#same for validation
val_datagen = ImageDataGenerator(preprocessing_function = preprocess)
validation_generator = val_datagen.flow_from_directory(
validation_data_dir,
target_size = (img_height, img_width),
batch_size=batch_size,
class_mode='categorical')
########################Model Creation###################################
#create the base pre-trained model
print('Finished Preprocessing, starting model creating \n')
base_model = InceptionV3(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(12, activation='softmax')(x)
model = Model(input=base_model.input, output=predictions)
for layer in model.layers[:-34]:
layer.trainable = False
for layer in model.layers[-34:]:
layer.trainable = True
from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=0.001, momentum=0.92),
loss='categorical_crossentropy',
metrics = ['accuracy'])
#############SAVE Model #######################################
file_name = str(datetime.datetime.now()).split(' ')[0] + '_{epoch:02d}.hdf5'
filepath = os.path.join(save_dir, file_name)
checkpoints =ModelCheckpoint(filepath, monitor='val_acc', verbose=1,
save_best_only=False, save_weights_only=False,
mode='auto', period=2)
###############Fit Model #############################
model.fit_generator(
train_generator,
steps_per_epoch =total_samples//batch_size,
epochs = epochs,
validation_data=validation_generator,
validation_steps=total_validation//batch_size,
callbacks = [checkpoints],
shuffle= True)
Run Code Online (Sandbox Code Playgroud)
更新输出:
在整个培训过程中,我只会得到培训准确性的结果,但是在培训结束时,我会同时获得培训和验证的准确性。
Epoch 1/10
1/363 [..............................] - ETA: 1:05:58 - loss: 2.4976 - acc: 0.0640
2/363 [..............................] - ETA: 51:33 - loss: 2.4927 - acc: 0.0760
3/363 [..............................] - ETA: 48:55 - loss: 2.5067 - acc: 0.0787
4/363 [..............................] - ETA: 47:26 - loss: 2.5110 - acc: 0.0770
5/363 [..............................] - ETA: 46:30 - loss: 2.5021 - acc: 0.0824
6/363 [..............................] - ETA: 45:56 - loss: 2.5063 - acc: 0.0820
Run Code Online (Sandbox Code Playgroud)
指定validation_split后,将为每个时期打印验证丢失和验证准确性。
model.fit(X, Y, epochs=1000, batch_size=10, validation_split=0.2)
Run Code Online (Sandbox Code Playgroud)
我已经在代码中使用了上面的代码,并且val_loss和val_acc在每个时代都被打印出来,但是不是在每批之后打印。
希望这能回答你的问题。
Epoch 1/500
1267/1267 [==============================] - 0s 376us/step - loss: 0.6428 - acc: 0.6409 - val_loss: 0.5963 - val_acc: 0.6656
Run Code Online (Sandbox Code Playgroud)
这个想法是您在每个时期之后而不是每个批次之后都要通过验证集。如果每一批之后您都必须在整个验证集中评估模型的性能,则将浪费大量时间。
在每个时期之后,您将获得相应的损失和准确性,以进行培训和验证。但是在一个时期内,您将只能获得训练损失和准确性。
| 归档时间: |
|
| 查看次数: |
6591 次 |
| 最近记录: |