Разработка предварительной модели в тензорном потоке для классификации изображенийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разработка предварительной модели в тензорном потоке для классификации изображений

Сообщение Anonymous »

У меня возникла проблема с тем, как изменить предварительно обученную модель для классификации 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»