我正在使用model.fit_generator来训练并获得我的二进制(两个类)模型的结果,因为我直接从我的文件夹中提供输入图像.如何在这种情况下得到混淆矩阵(TP,TN,FP,FN),因为我通常使用confusion_matrix命令sklearn.metrics来获取它,这需要predicted和actual标签.但在这里我没有两者.可能是我可以从predict=model.predict_generator(validation_generator)命令计算预测标签.但我不知道我的模型是如何从我的图像中获取输入标签的.我的输入文件夹的一般结构是:
train/
class1/
img1.jpg
img2.jpg
........
class2/
IMG1.jpg
IMG2.jpg
test/
class1/
img1.jpg
img2.jpg
........
class2/
IMG1.jpg
IMG2.jpg
........
Run Code Online (Sandbox Code Playgroud)
我的代码的一些块是:
train_generator = train_datagen.flow_from_directory('train',
target_size=(50, 50), batch_size=batch_size,
class_mode='binary',color_mode='grayscale')
validation_generator = test_datagen.flow_from_directory('test',
target_size=(50, 50),batch_size=batch_size,
class_mode='binary',color_mode='grayscale')
model.fit_generator(
train_generator,steps_per_epoch=250 ,epochs=40,
validation_data=validation_generator,
validation_steps=21 )
Run Code Online (Sandbox Code Playgroud)
所以上面的代码自动接受两个类输入,但我不知道它认为是哪个类0和哪个类1.
使用model.fit_generator时如何应用K-fold交叉验证.我正在向我的网络提供培训和验证数据.我知道从这里使用sklearn.model_selection.Kfold ,但不知道如何应用于我的模型.我的模型的一些块是:
train_generator = train_datagen.flow_from_directory('train',
target_size=(50, 50), batch_size=batch_size,
class_mode='binary',color_mode='grayscale')
validation_generator = test_datagen.flow_from_directory('test',
target_size=(50, 50),batch_size=batch_size,
class_mode='binary',color_mode='grayscale')
model.fit_generator(
train_generator,steps_per_epoch=250 ,epochs=40,
validation_data=validation_generator,
validation_steps=21 )
Run Code Online (Sandbox Code Playgroud) 我想使用以下代码在Keras中使用glorot uniform初始化一个4*11矩阵:
import keras
keras.initializers.glorot_uniform((4,11))
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
<keras.initializers.VarianceScaling at 0x7f9666fc48d0>
Run Code Online (Sandbox Code Playgroud)
如何可视化输出?我试过c [1]并得到输出'VarianceScaling' object does not support indexing.
我正在使用以下代码调整存储在文件夹(两个类)中的RGB图像的大小:
from keras.preprocessing.image import ImageDataGenerator
dataset=ImageDataGenerator()
dataset.flow_from_directory('/home/1',target_size=(50,50),save_to_dir='/home/resized',class_mode='binary',save_prefix='N',save_format='jpeg',batch_size=10)
Run Code Online (Sandbox Code Playgroud)
我的数据树如下所示:
1/
1_1/
img1.jpg
img2.jpg
........
1_2/
IMG1.jpg
IMG2.jpg
........
resized/
1_1/ (here i want to save resized images of 1_1)
2_2/ (here i want to save resized images of 1_2)
Run Code Online (Sandbox Code Playgroud)
运行代码后,我得到以下输出,但没有图像:
Found 271 images belonging to 2 classes.
Out[12]: <keras.preprocessing.image.DirectoryIterator at 0x7f22a3569400>
Run Code Online (Sandbox Code Playgroud)
如何保存图像?
我想在第三个纪元之后冻结以下代码的前两层的训练。总纪元设置为 10。
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
Run Code Online (Sandbox Code Playgroud) 我正在使用带有tensorflow后端的keras编写两个类别的图像分类代码。我的图像存储在计算机的文件夹中,我想将这些图像作为我的keras模型的输入。load_img我只需要一个输入图像,所以我必须使用flow(x,y)或flow_from_directory(directory),但是flow(x,y)我们还需要提供标签,这是长度任务,所以我正在使用flow_from_directory(directory)。我的图像大小可变,例如20 * 40、55 * 43 .....,但是这里提到需要固定的target_size。在该解决方案中,我们可以使用以下方法将可变大小的图像作为卷积层的输入input_shape=(1, None, None)或input_shape =(None,None,3)(最后一个通道和彩色图像),但fchollet提到它对平坦层没有用,我的模型同时包括卷积层和平坦层。在那篇文章中,只有moi90建议尝试不同的批次,但是每个批次都应具有相同大小的图像,但是由于我的数据非常分散,因此无法对相同尺寸的图像进行分组。所以我决定去batch size=1写下面的代码:
from __future__ import print_function
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras import backend as K
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
input_shape = (None,None,3)
model = Sequential()
model.add(Conv2D(8, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.get_weights()
model.add(Conv2D(16, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(32, activation='relu')) …Run Code Online (Sandbox Code Playgroud) machine-learning image-processing neural-network deep-learning keras
我正在使用以下Keras代码对mnist数据进行分类。从confusion_matrix命令sklearn.metrics我得到了混淆矩阵,从TruePositive= sum(numpy.diag(cm1))命令我得到了真正。但是我混淆了如何获得真否定,假肯定,假否定。我从这里阅读解决方案,但用户评论使我感到困惑。请帮助编写代码以获取参数。
from sklearn.metrics import confusion_matrix
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
import numpy as np
(x_train, y_train), (x_test, y_test) = mnist.load_data()
batch_size = 128
num_classes = 10
epochs = 1
img_rows, img_cols = 28, 28
y_test1=y_test
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, …Run Code Online (Sandbox Code Playgroud) 当我使用 matplotlib.image 读取灰度图像时,它显示尺寸 (512,512) 和类型 (float32),但是当我对同一图像使用 cv2.imread 时,它显示 (512,512,3) 并键入 uint8。为什么会这样?由于默认标志,cv2.imread 命令是否自动将图像转换为 BGR 格式。(我使用的是 python 3 和 opencv2。)以下是代码:
import cv2
import matplotlib.image as mpimage
img = cv2.imread('image_1.png')
img1=mpimage.imread('image_1.png')
Run Code Online (Sandbox Code Playgroud) 在我的 keras CNN 模型中,我想知道特定层的层数或索引,例如卷积层的索引。model.summary()将讲述模型的细节并model.layer讲述模型的层次。例如我的模型如下:
model.add(Conv2D(32,(2,2),input_shape=input_shape,activation='linear'))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=.1))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.1))
model.add(Conv2D(32, (2,2),activation='linear'))
Run Code Online (Sandbox Code Playgroud)
然后在上面的模型 Conv2D 层索引是 0 和 5。这件事我想知道。
我想在 keras 中制作自定义优化器。为此,我以自定义方式重新实现了 sgd,我的意思是我为此定义了类(用于二进制分类的 MLP),我将优化器命名为“myopt”。以下是代码:
from __future__ import absolute_import
import tensorflow as tf
import six
import copy
from six.moves import zip
from keras.utils.generic_utils import serialize_keras_object
from keras.utils.generic_utils import deserialize_keras_object
from keras.legacy import interfaces
from keras import backend as K
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
# Generate dummy data
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu')) …Run Code Online (Sandbox Code Playgroud) 我正在按照本教程了解 haar 功能。在编写以下代码时:
import numpy as np
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('Sachin.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
Run Code Online (Sandbox Code Playgroud)
收到以下错误:
File "<ipython-input-6-0b479e459b0f>", line 1, in <module>
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
error: /home/travis/miniconda/conda-bld/conda_1486587069159/work/opencv-3.1.0/modules/objdetect/src/cascadedetect.cpp:1639: error: (-215) !empty() in function detectMultiScale
Run Code Online (Sandbox Code Playgroud)
(Sachin 是我从谷歌下载的图像,大小为 (237,237,3),转换灰色后为 (237,237),min=23,max=210。我使用 opencv 3.1.0 和 python 3.6,使用命令conda安装install -c menpo opencv3。我正在尝试这个解决方案,但无法在我的桌面上找到 xml 文件。如何解决问题。
当我从以下链接运行代码时:
我收到以下错误:
使用 TensorFlow 后端。找到属于 2 个类别的 2000 张图像。/home/nd/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: 可能损坏 EXIF 数据。期望读取 80000 字节,但只得到 0。Skipping tag 64640 "Skipping tag %s" % (size, len(data), tag))
我正在使用 Ubuntu。
尝试的解决方案:将第 70 行和第 81 行中的“w”更改为“wb”。
提前谢谢
keras ×10
python ×5
keras-2 ×2
opencv ×2
scikit-learn ×2
tensorflow ×2
exif ×1
keras-layer ×1
matplotlib ×1
opencv3.0 ×1
opencv3.1 ×1
python-3.x ×1