【问题标题】:Multiclass classification using Keras使用 Keras 进行多类分类
【发布时间】:2017-09-27 00:54:22
【问题描述】:

我正在尝试使用 vgg16 预训练模型修改 keras 示例以进行三类分类。这是我的代码:

import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense
from keras import applications
from keras.optimizers import SGD
from keras import backend as K
K.set_image_dim_ordering('tf')
img_width, img_height = 224, 224
top_model_weights_path = 'bottleneck_fc_model.h5'
train_data_dir = 'data6/train'
validation_data_dir = 'data6/validation'
nb_train_samples = 300
nb_validation_samples = 60
epochs = 50
batch_size = 10
def save_bottlebeck_features():
   datagen = ImageDataGenerator(rescale=1. / 255)
   model = applications.VGG16(include_top=False, weights='imagenet', input_shape=(224, 224, 3))
   generator = datagen.flow_from_directory(
               train_data_dir,
               target_size=(img_width, img_height),
               batch_size=batch_size,
               class_mode='categorical',
               shuffle=False)
   bottleneck_features_train = model.predict_generator(
               generator, nb_train_samples // batch_size)
   np.save(open('bottleneck_features_train', 'wb'),bottleneck_features_train)

   generator = datagen.flow_from_directory(
               validation_data_dir,
               target_size=(img_width, img_height),
               batch_size=batch_size,
               class_mode='categorical',
               shuffle=False)
   bottleneck_features_validation = model.predict_generator(
               generator, nb_validation_samples // batch_size)
   np.save(open('bottleneck_features_validation', 'wb'),bottleneck_features_validation)

def train_top_model():
   train_data = np.load(open('bottleneck_features_train.npy', 'rb'))
   train_labels = np.array([0] * (nb_train_samples // 3) + [1] *       (nb_train_samples // 3 + [2] * (nb_train_samples // 3)))
   validation_data = np.load(open('bottleneck_features_validation.npy', 'rb'))
   validation_labels = np.array([0] * (nb_validation_samples // 3) + [1] * (nb_validation_samples // 3 + [2] * (nb_validation_samples // 3))
   model = Sequential()
   model.add(Flatten(input_shape=train_data.shape[1:]))
   model.add(Dense(128, activation='relu'))
   model.add(Dropout(0.5))
   model.add(Dense(3, activation='sigmoid'))
   sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=False)
   model.compile(optimizer=sgd,
         loss='categorical_crossentropy', metrics=['accuracy'])
   model.fit(train_data, train_labels,
          epochs=epochs,
          batch_size=batch_size,
   validation_data=(validation_data, validation_labels))
          model.save_weights(top_model_weights_path)

save_bottlebeck_features()
train_top_model()   

我在该行得到一个无效的语法:model = Sequential() 请帮助我进行更正。期待。

【问题讨论】:

  • 您在前一行中缺少一个括号,该括号以validation_labels 开头。
  • 感谢您的回复。此外,我必须添加“to_categorical”语句以使用一种热编码对多类分类问题进行分类。现在对我来说效果很好。

标签: classification keras


【解决方案1】:

调整代码使其与 tensorflow 2.0 和 tf.keras 兼容。

from tf.keras.preprocessing.image import ImageDataGenerator
from tf.keras.models import Sequential
from tf.keras.layers import Dropout, Flatten, Dense
from tf.keras import applications
from tf.keras.optimizers import SGD
from tf.keras import backend as K
K.set_image_dim_ordering('tf')
img_width, img_height = 224, 224
top_model_weights_path = 'bottleneck_fc_model.h5'
train_data_dir = 'data6/train'
validation_data_dir = 'data6/validation'
nb_train_samples = 300
nb_validation_samples = 60
epochs = 50
batch_size = 10
def save_bottlebeck_features():
   datagen = ImageDataGenerator(rescale=1. / 255)
   model = applications.VGG16(include_top=False, weights='imagenet', input_shape=(224, 224, 3))
   generator = datagen.flow_from_directory(
               train_data_dir,
               target_size=(img_width, img_height),
               batch_size=batch_size,
               class_mode='categorical',
               shuffle=False)
   bottleneck_features_train = model.predict_generator(
               generator, nb_train_samples // batch_size)
   np.save(open('bottleneck_features_train', 'wb'),bottleneck_features_train)

   generator = datagen.flow_from_directory(
               validation_data_dir,
               target_size=(img_width, img_height),
               batch_size=batch_size,
               class_mode='categorical',
               shuffle=False)
   bottleneck_features_validation = model.predict_generator(
               generator, nb_validation_samples // batch_size)
   np.save(open('bottleneck_features_validation', 'wb'),bottleneck_features_validation)

def train_top_model():
   train_data = np.load(open('bottleneck_features_train.npy', 'rb'))
   train_labels = np.array([0] * (nb_train_samples // 3) + [1] *       (nb_train_samples // 3 + [2] * (nb_train_samples // 3)))
   validation_data = np.load(open('bottleneck_features_validation.npy', 'rb'))
   validation_labels = np.array([0] * (nb_validation_samples // 3) + [1] * (nb_validation_samples // 3 + [2] * (nb_validation_samples // 3)))
   model = Sequential()
   model.add(Flatten(input_shape=train_data.shape[1:]))
   model.add(Dense(128, activation='relu'))
   model.add(Dropout(0.5))
   model.add(Dense(3, activation='sigmoid'))
   sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=False)
   model.compile(optimizer=sgd,
         loss='categorical_crossentropy', metrics=['accuracy'])
   model.fit(train_data, train_labels,
          epochs=epochs,
          batch_size=batch_size,
   validation_data=(validation_data, validation_labels))
          model.save_weights(top_model_weights_path)

save_bottlebeck_features()
train_top_model()   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 2018-02-17
    • 2019-08-08
    • 2019-06-24
    • 2018-12-15
    • 2020-06-26
    • 2018-09-29
    • 2017-10-25
    相关资源
    最近更新 更多