У меня возникла проблема с тем, как изменить предварительно обученную модель для классификации 3 классов вместо 1000. Это 2 метода, которые я придумал на данный момент... я не уверен, какой из них лучший.NASNetMobile_model = tf.keras.applications.NASNetMobile (
input_shape=(224,224,3),
include_top=False,
pooling='avg',
classes=3,
weights='imagenet'
)
NASNetMobile_model.trainable=False
NASNetMobile_model.summary()type here
В методе 1 модель NASNetMobile инициализируется с предварительно обученными весами ImageNet, исключая верхний уровень и используя средний пул. Модель настроена как необучаемая, чтобы предотвратить обновление ее весов во время обучения. Затем создается новая последовательная модель, которая включает в себя предварительно обученную модель NASNetMobile, за которой следуют два плотных слоя: один со 128 единицами и активацией ReLU, а другой с 3 единицами и активацией softmax для окончательной классификации. Последовательная модель компилируется с оптимизатором Адама и разреженной категориальной кросс-энтропийной потерей. Наконец, модель обучается на наборе данных для 20 эпох с размером пакета 4 и разделением проверки 20%.
Метод 1
new_pretrained_model = tf.keras.Sequential()
new_pretrained_model.add(NASNetMobile_model)
new_pretrained_model.add(tf.keras.layers.Dense(128, activation='relu'))
new_pretrained_model.add(tf.keras.layers.Dense(3, activation='softmax'))
new_pretrained_model.layers[0].trainable = False
new_pretrained_model.summary() here
new_pretrained_model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
new_pretrained_model.fit(
Xtrain,
Ytrain,
epochs=20,
batch_size=4,
validation_split=0.2
)
Метод 2
В методе 2 функциональный API используется для создания новой модели. Выходные данные предварительно обученной модели NASNetMobile принимаются в качестве входных данных для нового плотного слоя со 128 единицами и активацией ReLU, за которым следует финальный плотный слой с 3 единицами и активацией softmax. Этот подход явно связывает входные данные модели NASNetMobile с новыми выходными слоями, образуя новую модель с теми же входными данными, что и исходная модель NASNetMobile, но с дополнительными плотными слоями для классификации. Затем новая модель компилируется с использованием оптимизатора Адама и разреженной категориальной перекрестной энтропийной потери и обучается на наборе данных для 20 эпох с размером пакета 4 и разделением проверки 20%.
NASNetMobile_model_out = NASNetMobile_model.output
x = tf.keras.layers.Dense(128, activation='relu')(NASNetMobile_model_out)
output = tf.keras.layers.Dense(3, activation='softmax')(x)
model_2 = tf.keras.Model(inputs = NASNetMobile_model.input, outputs=output)
model_2.summary()
model_2.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
model_2.fit(
Xtrain,
Ytrain,
epochs=20,
batch_size=4,
validation_split=0.2
)
Подробнее здесь: https://stackoverflow.com/questions/785 ... sification
Разработка предварительной модели в тензорном потоке для классификации изображений ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Модель предварительной обработки, разработанная в TensorFlow для классификации изображений
Anonymous » » в форуме Python - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-