狗与猫:如何标记数据?

时间:2018-09-06 10:04:07

标签: python tensorflow machine-learning keras deep-learning

我正在构建“狗与猫”分类器,但无法确定分类数据的位置。对于kaggle的泰坦尼克号竞争,数据存在于Survived(0或1)列中。

但是,CNN怎么知道哪个被分类为狗或猫?我已经在下面发布了我的代码。

from keras import layers 
from keras import models 

model=models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(150,150,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

from keras import optimizers

model.compile(loss='binary_crossentropy',
optimizer=optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
from keras.preprocessing.image import ImageDataGenerator

train_datagen=ImageDataGenerator(rescale=1./255)
test_datagen=ImageDataGenerator(rescale=1./255)


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

train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')



history=model.fit_generator(train_generator,
steps_per_epoch=100,epochs=30,
validation_data=validation_generator,
validation_steps=50)






train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)

我知道正在创建此目录,并且所有培训文件都已加载到该目录中(这是单独的代码)。此外,在此过程中,它将图像分成猫文件夹和狗文件夹。这类似于泰坦尼克号“存活”柱吗?

1 个答案:

答案 0 :(得分:2)

ImageDataGenerator类有两种方法flow()flow_from_directory()从大型numpy数组和包含图像的文件夹中读取图像。 / p>

因此,在使用flow_from_directory()函数的情况下,您不必指定标签,而keras本身可以完成所有操作。 您只需要将训练图像和验证图像放在这样的文件夹和子文件夹中:

/train
      |
      /cat
         /cat1.jpg
         /cat2.jpg
      /dog
         /dog1.jpg
         /dog2.jpg

因此,通过这种文件夹排列方式,flow_from_directory()函数将自己做标签。