У меня возникла проблема с тем, как изменить предварительно обученную модель для классификации 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
Программы на Python
1730264398
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
)
Подробнее здесь: [url]https://stackoverflow.com/questions/78540179/pretrain-model-developing-in-tensorflow-for-image-classification[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия