python - 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
但它似乎不起作用任何答案将不胜感激非常感谢
解决方案
基本上,def classicalModel(input_size)
是一个函数定义。为了让它工作,你必须input_shape
在调用它时向它传递一个有效值。简而言之,这样的事情应该有效:
model = classicalModel(input_shape=(batch_size, IM_WIDTH, IM_HEIGHT))
您必须定义模型输入的样子
推荐阅读
- r - 有人可以帮我解决 R 中的 Vader Sentiment 问题吗?
- neo4j - 返回没有照片的相册的空列表
- python - 无论列如何,Python Pandas 在数据框中找到值
- python - 熊猫将不同日期的列添加到日期时间列
- python - 在jupyter中抑制matplotlib动画中最后一帧的显示
- c++ - 带有 is_invocable_v 的 clang++ 中的 ICE / 我的代码有效吗?
- amazon-web-services - 无法使用 psycopg 连接到 redshift 集群
- python - 使用 matplotlib 的计算机之间的执行时间存在巨大差异
- python - 运行以下代码时出现逻辑错误
- reactjs - react中如何在url开头放置参数