首页 > 解决方案 > NameError:名称'input_shape'未定义

问题描述

嘿,伙计们,我是深度学习的初学者,目前正在尝试我发现用来制作模型的基本 cnn

但我有一些错误说

 49 tensorboard=TensorBoard(log_dir="logs/{}".format(time()))

---> 50 模型 = ClassicalModel(input_shape) 51 model.fit_generator( 52 train_generator,

NameError:名称'input_shape'未定义

带代码

import os
from imutils import paths
from keras.preprocessing.image import ImageDataGenerator
from keras import backend as K
from keras.callbacks import TensorBoard
from time import time
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense


IM_WIDTH=224
IM_HEIGHT=224
EPOCH=2
batch_size=32

ORIG_INPUT_DATASET="/content/drive/MyDrive/DataFix/DataJadi"
BASE_PATH="/content/drive/MyDrive/DataFix/DataJadi/"

TRAIN_PATH = os.path.sep.join([BASE_PATH, "training"])
VAL_PATH = os.path.sep.join([BASE_PATH, "validation"])

totalTrain = len(list(paths.list_images(TRAIN_PATH)))
totalVal = len(list(paths.list_images(VAL_PATH)))

def ClassicalModel(input_shape):
  model = Sequential()
  model.add(Conv2D(32, (3, 3), input_shape=input_shape))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  model.add(Conv2D(32, (3, 3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  model.add(Conv2D(64, (3, 3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  model.add(Flatten())
  model.add(Dense(64,activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(2, activation='softmax'))
  model.compile(optimizer='adam',
                loss='categorical_crossentropy', metris=['accuracy'])
  
  return model

train_datagen = ImageDataGenerator(
    rescale=1 / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True
)

val_datagen = ImageDataGenerator(rescale=1 / 255)

train_generator = train_datagen.flow_from_directory(TRAIN_PATH,
                                                    target_size=(IM_WIDTH, IM_HEIGHT),
                                                    batch_size=batch_size,
                                                    class_mode='categorical')

validation_generator = val_datagen.flow_from_directory(
    VAL_PATH,
    target_size=(IM_WIDTH, IM_HEIGHT),
    batch_size=batch_size,
    class_mode='categorical'
)
tensorboard=TensorBoard(log_dir="logs/{}".format(time()))
model = ClassicalModel(input_shape)
model.fit_generator(
    train_generator,
    steps_per_epoch=totalTrain // batch_size,
    epochs=EPOCH,
    validation_data=validation_generator,
    validation_steps=totalVal // batch_size,
    verbose=1,
    callbacks=[tensorboard])
model.save_weights('GerakanUjian.h5')
model.save('GerakanUjian.h5')

我已经添加了 input_shapedef classicalModel但它似乎不起作用任何答案将不胜感激非常感谢

标签: pythontensorflowkerasdeep-learning

解决方案


基本上,def classicalModel(input_size)是一个函数定义。为了让它工作,你必须input_shape在调用它时向它传递一个有效值。简而言之,这样的事情应该有效:

model = classicalModel(input_shape=(batch_size, IM_WIDTH, IM_HEIGHT))

您必须定义模型输入的样子


推荐阅读