我正在尝试训练一个模型,以识别包含火灾VS包含森林的图像的图像。我正在使用Linode在远程服务器上训练模型。我正在使用Python 2.7和Ubuntu 16.04.5。
当我在本地或Jupyter笔记本中运行以下代码时,它将创建2个类,但是当我想在服务器上运行时,它将创建3个类。
对模型进行分类的代码:
def onehot(x): return np.array(OneHotEncoder().fit_transform(x.reshape(-1,1)).todense())
model = keras.applications.InceptionV3(weights='imagenet', include_top=False)
batch_size=16
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(
'datareal/train', # this is the target directory
batch_size=batch_size,
target_size=(224, 224),
class_mode='binary')
test_datagen = ImageDataGenerator(rescale=1./255)
validation_generator = test_datagen.flow_from_directory(
'datareal/valid',
batch_size=batch_size,
target_size=(224, 224),
class_mode='binary')
x = model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 2 classes
predictions = Dense(2, activation='softmax')(x)
newmodel = Model(inputs=model.input, outputs=predictions)
newmodel.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
输出:
Found 173 images belonging to 3 classes.
Found 40 images belonging to 3 classes.
包含所有图像的目录的结构如下:
datareal
valid
forest
fire
train
forest
fire
我如何使模型仅标记2个类而不是3个?
答案 0 :(得分:2)
我知道了。问题是我的火车和验证文件夹中仍然有一些隐藏的文件夹。
答案 1 :(得分:0)
对于仍在 colab 中苦苦挣扎的人: 额外的文件是隐藏的,因此首先您必须找到它。您可以通过编写以下行来实现:
import os
import shutil
os.listdir("the_target_directory_trining_for_example")
那么结果将是隐藏文件夹的名称以及您的文件夹(类)的名称。
['class2', 'classs1', '.ipynb_checkpoints']
接下来,您必须使用以下行删除添加的文件夹(.ipynb_checkpoints),但要小心使用。
shutil.rmtree("the_target_directory_trining_for_example/.ipynb_checkpoints")