【发布时间】:2020-09-05 10:01:58
【问题描述】:
据我了解,全球平均池化应该会提高训练速度。但由于某种原因,它没有。我用Horse Or Human dataset。这是我的代码:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
target_size = (160, 160)
batch_size = 100
data_generator = ImageDataGenerator(
zoom_range=0.1,
shear_range=0.1,
rotation_range=30,
brightness_range=[0.8, 1.2],
channel_shift_range=0.1,
horizontal_flip=True,
)
train_generator = data_generator.flow_from_directory(
'data/horse-or-human/train',
class_mode='binary',
target_size=target_size,
batch_size=batch_size,
)
val_generator = data_generator.flow_from_directory(
'data/horse-or-human/validation',
class_mode='binary',
target_size=target_size,
batch_size=batch_size,
)
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.layers import *
base_model = VGG16(
include_top=False,
input_shape=(*target_size, 3)
)
for layer in base_model.layers:
layer.trainable = False
layer = Flatten()(base_model.output)
layer = Dense(512, activation='relu')(layer)
out = Dense(1, activation='sigmoid')(layer)
model = Model(inputs=base_model.input, outputs=out)
model.compile(optimizer=Adam(lr=5e-6), loss='binary_crossentropy', metrics=['acc'])
history = model.fit(
train_generator,
epochs=150,
steps_per_epoch=len(train_generator),
validation_data=val_generator,
validation_steps=len(val_generator))
此模型的每个训练阶段大约需要 14 秒。可训练参数个数为 6,554,625。
base_model = VGG16(
include_top=False,
input_shape=(*target_size, 3)
)
for layer in base_model.layers:
layer.trainable = False
layer = GlobalAvgPool2D()(base_model.output)
layer = Dense(512, activation='relu')(layer)
out = Dense(1, activation='sigmoid')(layer)
model = Model(inputs=base_model.input, outputs=out)
model.compile(optimizer=Adam(lr=5e-6), loss='binary_crossentropy', metrics=['acc'])
history = model.fit(
train_generator,
epochs=150,
steps_per_epoch=len(train_generator),
validation_data=val_generator,
validation_steps=len(val_generator))
此模型只有 263,169 个可训练参数。但是每个 epoch 的时间仍然在 14 秒左右。
我用更大的 target_size 和其他基本模型进行了尝试,但实施 GlobalAvgPool2D 前后的时间仍然相同。
请解释一下这种行为。
【问题讨论】:
标签: python tensorflow machine-learning keras computer-vision