【问题标题】:Issues with keras Efficientnet import and Data Augmentationkeras Efficientnet 导入和数据增强的问题
【发布时间】:2021-05-30 14:31:44
【问题描述】:

我正在尝试使用带有数据增强的迁移学习来训练模型。 我的图像数据是 32 x 32 x 3,我想导入 EfficientNet07,但是每次运行时

from tensorflow.keras.applications import EfficientNetB0
model = EfficientNetB0(weights='imagenet')

我收到错误消息:

ImportError: cannot import name 'EfficientNetB7' from 'tensorflow.keras.applications' (C:\Users\…..

我不情愿地恢复到 Resnet50,效果很好。但我真的很想与高效网络合作。

其次,我希望在模型运行时使用 keras.exermental.preprocessing 层来添加数据增强,但我得到了错误

from tensorflow.keras.layers.experimental import preprocessing
from tensorflow.keras.models import Sequential
from tensorflow.keras import layers

img_augmentation = Sequential(
    [
        preprocessing.RandomRotation(factor=0.15),
        preprocessing.RandomTranslation(height_factor=0.1, width_factor=0.1),
        preprocessing.RandomFlip(),
        preprocessing.RandomContrast(factor=0.1),
    ],
    name="img_augmentation",
)

AttributeError: module 'tensorflow.keras.layers.experimental.preprocessing' has no attribute 'RandomRotation'

我从https://keras.io/examples/vision/image_classification_efficientnet_fine_tuning/获取了所有这些代码

并从上到下阅读了三次。我继续使用 ImageDataGenerator 并编写了这段代码

def choosen_args(args):
#this function is to randomly choose the augmentation techniques from the list available in keras

    key_list = []
    arg_list = list(args.keys())
    for i in range(len(arg_list)):
        if np.random.randint(2) == 0:
            pass
        else:
            key_list.append(arg_list[i])
    
    arg_dict = dict((k, args[k]) for k in key_list)
    return arg_dict

#这是我正在使用的所有增强的列表 - 但只有少数会被选中进行最终转换

args = dict(
    rotation_range = 120,
    width_shift_range=0.4,
    height_shift_range=0.4,
    shear_range=0.2,
    zoom_range=0.2,
    fill_mode ='nearest',
    zca_whitening=True,
    zca_epsilon=1e-06,
    brightness_range=(9.0, 46.0),
    channel_shift_range=60.0,
    horizontal_flip=True,
    vertical_flip=True,
    rescale=random.randint(1,11))

data_augmentation_train = ImageDataGenerator( choosen_args(args) ) 
data_augmentation_validation = ImageDataGenerator( choosen_args(args) )

data_augmentation_train.fit(x_train, augment = True)
data_augmentation_validation.fit(x_test, augment = True)

请帮助:

  1. 如何获得高效的net07 并将其权重用于迁移学习
  2. 我使用的数据增强代码 - 我如何可视化它的作用 - 即转换我的图像
  3. 是否有更简单的数据扩充方法 - 如何修复导入和属性错误
  4. 将数据放入生成器后 - 如何将其与其他迁移学习代码一起使用。

base_model = tf.keras.applications.ResNet50(weights='imagenet',

 include_top = False, input_shape = input_size) 
> x_train = tf.keras.applications.resnet50.preprocess_input(x_train)
> x_test = tf.keras.applications.resnet50.preprocess_input(x_test)
> base_model.trainable = False
    inputs = keras.Input(shape=(32, 32, 3))
    model = base_model_ResNet50(inputs, training=False)
    model = keras.layers.GlobalAveragePooling2D()(model )
    model= keras.layers.Flatten()(model)
    model = keras.layers.Dropout(0.2)(model)
    output = layers.Dense(100, activation="softmax")(model)
    
    history = model.fit(data_augmentation_train.flow (x_train, labels_train, batch_size = 64), validation_data =

data_augmentation_validation.flow(x_test,labels_test))

谢谢

【问题讨论】:

  • 我也有同样的问题。

标签: keras transfer-learning


【解决方案1】:

尝试导入为:

from keras_efficientnets import EfficientNetB0

model = EfficientNetB0(weights='imagenet')

【讨论】:

  • 嗨。这对我不起作用。我收到一个错误 - 没有这样的模块。
  • 我试过 --------- importefficientnet.keras asefficientnet - 这工作。但仍然不确定如何进一步预处理我的数据。
  • 你安装包了吗? pip install keras_efficientnets
  • 还要记住 ImageNet 权重只能用 EfficientNetB0-5 加载,所以 B7 还不支持.. 将 B7 改为 B0
【解决方案2】:

首先安装efficientnet模块:

!pip install -U efficientnet

然后将其导入为:

import efficientnet.keras as effnet

创建模型:

model = effnet.EfficientNetB0(weights = 'imagenet')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多