Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras 这是训练模型的正确方法吗?_Keras_Deep Learning_Data Augmentation - Fatal编程技术网

Keras 这是训练模型的正确方法吗?

Keras 这是训练模型的正确方法吗?,keras,deep-learning,data-augmentation,Keras,Deep Learning,Data Augmentation,我不熟悉keras和深度学习。我曾尝试使用数据增强来训练我的模型,但不确定是否正确。有人能向我保证我的方法是正确的吗?这是我的密码: train_path = 'Digital_Mamo/OPTIMAM' # Relative Path valid_path = 'Digital_Mamo/InBreast' test_path = 'Digital_Mamo/BCDR' valid_batches = ImageDataGenerator().flow_from_director

我不熟悉keras和深度学习。我曾尝试使用数据增强来训练我的模型,但不确定是否正确。有人能向我保证我的方法是正确的吗?这是我的密码:

train_path = 'Digital_Mamo/OPTIMAM'      # Relative Path
valid_path = 'Digital_Mamo/InBreast'
test_path = 'Digital_Mamo/BCDR'


valid_batches = ImageDataGenerator().flow_from_directory(valid_path, target_size=(224, 224), classes=['Benign', 'Malignant'], batch_size=9)
test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224, 224), classes=['Benign', 'Malignant'], batch_size=7)

datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1,
       height_shift_range=0.1, shear_range=0.15, zoom_range=0.1,
       channel_shift_range=10., horizontal_flip=True)

train_batches = datagen.flow_from_directory(
        train_path,
        target_size=(224, 224),
        batch_size=10,
        classes=['Benign','Malignant'])


vgg16_model= load_model('Fetched_VGG.h5')

# transform the model to Sequential
model= Sequential()
for layer in vgg16_model.layers[:-1]:
    model.add(layer)

model.summary()

# Freezing the layers (Oppose weights to be updated)
for layer in model.layers:
    layer.trainable = False


model.add(Dense(2, activation='softmax', name='predictions'))


### Compile the model
model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# train the model
model.fit_generator(train_batches, steps_per_epoch=28, validation_data=valid_batches, validation_steps=3, epochs=5, verbose=2)

#test
predictions = model.predict_generator(test_batches, steps=3, verbose=0)

这是一种正确的方法,但您可以使用
steps\u per\u epoch=len(train\u batches)
validation\u steps=len(val\u batches)
在添加更多数据时更方便。此外,您还可以将
test
包含在
valid
中,因为即使您单独使用它们,也不会有任何帮助

编辑:
正如@Matias指出的,您不应该在validate上使用增强。因此,正如我在评论中所说,这并非完全错误,但并非真正正确。

事实上,这是不正确的,因为您对其进行编码的方式是,将数据扩充应用于验证集和测试集,并且只应将扩充应用于训练集


您需要为验证集和测试集创建第二个实例
ImageDataGenerator
,而不使用任何增强集。

这不是正确的计算方法:每个历元的步长=(数据集大小)/批量大小吗?我的训练样本量是280,批量大小是10,所以我设置了steps\u per\u epoch=28。另一个问题是,是否可以对测试和有效性进行数据扩充?第一个问题是,但该值已在此处计算。因此,您可以使用
len
来简化更改数据的过程。另外一个问题,可能没问题。如果您的增强没有使图像更改到无法识别的程度,那么这很好,如果训练集无论如何都无法识别,您就不会得到好的结果。但是仍然有疑问,为什么?为了测试和验证而进行数据扩充可以吗?@Annanya不,只是为了训练集,我已经按照你的建议更改了我的代码(在我的主要帖子中)。“我现在做得对吗?”MatiasValdenegro你能看看这个问题吗?我挣扎了几个小时,找不到答案。