МБ|0.704|0.895|4,253,864|88
MobileNetV2|14 МБ|0.713|0.901|3,538,984|88
DenseNet121|33 МБ| 0.750|0.923|8,062,504|121
DenseNet169|57 МБ| 0.762|0.932|14,307,880|169
DenseNet201|80 МБ|0.773|0.936|20,242,984|201
NASNetMobile|23 МБ|0.744|0.919|5,326,716|-|
NASNetLarge|343 МБ|0.825|0.960|88,949,818|-|
В связи с ограничениями по оборудованию, учитывая комплексный анализ точности модели, размера и сложности, была выбрана модель Xception, которая представляет собой сверточную нейронную сеть с 134 слоями (включая слои активации и нормализации пакетов).
Определение функции Xception:
def Xception(include_top=True,
weights='imagenet',
input_tensor=None,
input_shape=None,
pooling=None,
classes=1000,
**kwargs)
Построение кода
Перенос обучения с использованием весов xception_weights:
# Установка ширины и высоты входного изображения, а также количества каналов
img_size = (299, 299, 3)
base_model = keras.applications.xception.Xception(include_top=False,
weights='..\\resources\\keras-model\\xception_weights_tf_dim_ordering_tf_kernels_notop.h5',
input_shape=img_size,
pooling='avg')
# Полносвязный слой с активацией softmax для вычисления вероятности и 628 классами
model = keras.layers.Dense(628, activation='softmax', name='predictions')(base_model.output)
model = keras.Model(base_model.input, model)
# Блокировка слоев свертки
for layer in base_model.layers:
layer.trainable = False
from base_model import model
# Настройка размера изображения и параметров каталога для обучающего набора
img_size = (299, 299)
dataset_dir = '..\\dataset\\dataset'
img_save_to_dir = 'resources\\image-traing\\'
log_dir = 'resources\\train-log'
model_dir = 'resources\\keras-model\\'
# Использование методов увеличения данных
train_datagen = keras.preprocessing.image.ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
width_shift_range=0.4,
height_shift_range=0.4,
rotation_range=90,
zoom_range=0.7,
horizontal_flip=True,
vertical_flip=True,
preprocessing_function=keras.applications.xception.preprocess_input)
test_datagen = keras.preprocessing.image.ImageDataGenerator(
preprocessing_function=keras.applications.xception.preprocess_input)
train_generator = train_datagen.flow_from_directory(
dataset_dir,
save_to_dir=img_save_to_dir,
target_size=img_size,
class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(
dataset_dir,
save_to_dir=img_save_to_dir,
target_size=img_size,
class_mode='categorical')
# Метод ранней остановки и динамическая настройка скорости обучения
early_stop = EarlyStopping(monitor='val_loss', patience=13)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=7, mode='auto', factor=0.2)
tensorboard = keras.callbacks.tensorboard_v2.TensorBoard(log_dir=log_dir)
for layer in model.layers:
layer.trainable = False
# Компиляция модели
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit_generator(train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
epochs=100,
validation_data=validation_generator,
validation_steps=validation_generator.samples // validation_generator.batch_size)
Обратите внимание, что перевод может содержать неточности или ошибки, так как некоторые термины и понятия могут иметь несколько значений или интерпретаций. **Callbacks**
callbacks=[early_stop, reduce_lr, tensorboard])
# Модель экспорта
model.save(model_dir + 'chinese_medicine_model_v1.0.h5')
model=keras.models.load_model('resources\keras-model\chinese_medicine_model_v2.0.h5')
for layer in model.layers: layer.trainable = False for layer in model.layers[126:132]: layer.trainable = True
history = model.fit_generator(train_generator, steps_per_epoch=train_generator.samples // train_generator.batch_size, epochs=100, validation_data=validation_generator, validation_steps=validation_generator.samples // validation_generator.batch_size, callbacks=[early_stop, reduce_lr, tensorboard]) model.save(model_dir + 'chinese_medicine_model_v2.0.h5')
4. На сервере используется ONNX Runtime для вызова обученной модели.
**Обзор модели**
[Подробная структура модели](medicine-doc/assets/images/model.png)
**Визуализация точности обучения и функции потерь**


5. **Данные medicine-dataset**
- [Набор данных](medicine-dataset/dataset2): пиксели: 299*299
- [Таблица кодирования названий китайских лекарств](medicine-doc/assets/medicine_label.txt)
6. **Общий класс utility medicine**
- Описание [MongoDbUtil](medicine-util/src/main/java/cn/xiaohaoo/medicine/util/mongo/)
## Зависимости среды
|Зависимость|Версия|
|:---:|:---:|
|JDK|11+|
|Python|3.6|
|Gradle|6.5|
|TensorFlow|2.0|
|MongoDB|4.2.2|
|MySQL|8.0+|
|Spring Boot|2.2.2|
|Elasticsearch|7.4.2|
|IK токенизатор|7.4.2|
|ONNX Runtime|1.8.1|
## Использование открытого исходного кода
- **Разрешено для личного изучения;**
- **Открытая версия не подходит для коммерческого использования;**
- **Запрещается продавать код и ресурсы этого проекта в любой форме, ответственность за любые последствия несёт нарушитель;**
- **[LICENSE](LICENSE)**
## Общение, обратная связь и участие
- Если вы хотите следить за последними новостями проекта, пожалуйста, Watch или Star проект, это также лучшая поддержка для проекта.
- Приглашаем к участию в технических дискуссиях, вторичной разработке и консультациях по вопросам и предложениям!
- QQ: 993021993
- WeChat:

#### Разработка открытых проектов — непростая задача, спасибо всем друзьям за star! ^_^
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )