【问题标题】:TypeError: ('Keyword argument not understood:', 'input') in Keras类型错误:('关键字参数不理解:','输入')在 Keras
【发布时间】:2020-12-09 16:40:27
【问题描述】:

我正在尝试实现efficientnetB0 来创建图像分类器。我现在开始只为二进制分类创建模型。 在 ubuntu 18.4 上使用 Keras==2.4.3、tensorflow==2.3.1 和 Python 3.6

efficientnetB0 的代码 -

import os 
import zipfile 
import tensorflow as tf 
from tensorflow.keras.preprocessing.image import ImageDataGenerator 
from tensorflow.keras import layers 
from tensorflow.keras import Model 
import matplotlib.pyplot as plt


local_zip = '/tmp/cats_and_dogs_filtered.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp')
zip_ref.close()

base_dir = '/tmp/cats_and_dogs_filtered'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')

# Directory with our training cat pictures
train_cats_dir = os.path.join(train_dir, 'cats')

# Directory with our training dog pictures    
train_dogs_dir = os.path.join(train_dir, 'dogs')

# Directory with our validation cat pictures
validation_cats_dir = os.path.join(validation_dir, 'cats')

# Directory with our validation dog pictures
validation_dogs_dir = os.path.join(validation_dir, 'dogs')


# Set up matplotlib fig, and size it to fit 4x4 pics
import matplotlib.image as mpimg
nrows = 4
ncols = 4

fig = plt.gcf()
fig.set_size_inches(ncols*4, nrows*4)
pic_index = 100
train_cat_fnames = os.listdir( train_cats_dir )
train_dog_fnames = os.listdir( train_dogs_dir )


next_cat_pix = [os.path.join(train_cats_dir, fname) 
            for fname in train_cat_fnames[ pic_index-8:pic_index] 
           ]

next_dog_pix = [os.path.join(train_dogs_dir, fname) 
            for fname in train_dog_fnames[ pic_index-8:pic_index]
           ]

for i, img_path in enumerate(next_cat_pix+next_dog_pix):
  # Set up subplot; subplot indices start at 1
  sp = plt.subplot(nrows, ncols, i + 1)
  sp.axis('Off') # Don't show axes (or gridlines)

  img = mpimg.imread(img_path)
  #plt.imshow(img)

#plt.show()


# Add our data-augmentation parameters to ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255., rotation_range = 40, width_shift_range = 0.2, height_shift_range = 0.2, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1.0/255.)

train_generator = train_datagen.flow_from_directory(train_dir, batch_size = 20, class_mode = 'binary', target_size = (224, 224))

validation_generator = test_datagen.flow_from_directory( validation_dir, batch_size = 20, class_mode = 'binary', target_size = (224, 224))

base_model = efn.EfficientNetB0(input_shape = (224, 224, 3), include_top = False, weights = 'imagenet')

for layer in base_model.layers:
    layer.trainable = False

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D
from keras import backend as K

x = base_model.output
x = Flatten()(x)
x = Dense(1024, activation="relu")(x)
x = layers.Dropout(0.5)(x)
predictions = Dense(1, activation="sigmoid")(x)
model_final = Model(input = base_model.input, output = predictions)

model_final.compile(optimizers.rmsprop(lr=0.0001, decay=1e-6),loss='binary_crossentropy',metrics=['accuracy'])

eff_history = model_final.fit_generator(train_generator, validation_data = validation_generator, steps_per_epoch = 100, epochs = 10)

我得到的错误 -

Traceback (most recent call last):
  File "code_efficientNet.py", line 92, in <module>
    model_final = Model(input = base_model.input, output = predictions)
  File "/home/ubuntu/classification/lib/python3.6/site-packages/tensorflow/python/training/tracking/base.py", line 457, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "/home/ubuntu/classification/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 262, in __init__
'name', 'autocast'})
  File "/home/ubuntu/classification/lib/python3.6/site-packages/tensorflow/python/keras/utils/generic_utils.py", line 778, in validate_kwargs
raise TypeError(error_message, kwarg)
TypeError: ('Keyword argument not understood:', 'input')

Reffered this link to write the code

【问题讨论】:

  • 这不是一个好问题在这里问,很明显你正在尝试使用未定义的变量,这算作一个错字,这是一个基本的编程概念,你在使用它们之前定义变量,并且您已经将 base_model 用于预训练模型。

标签: python tensorflow keras image-classification efficientnet


【解决方案1】:

您应该提供x = model_final.output 而不是x = model.output,因为您已将变量名称指定为model_final

【讨论】:

  • 我进行了更改并获得了 Traceback(最近一次调用最后一次):文件“code_efficientNet.py”,第 84 行,在 x = model_final.output NameError: name 'model_final' is not defined
  • 在我的代码中,我在 x = model.output 处出现错误,并且 model_final 是在第 4 步之后定义的
猜你喜欢
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多