你好,下面是一个keras的softmax分类器+自编码器的python代码。你需要安装最新的theano1.0.4才可以跑。
import osos.environ['KERAS_BACKEND'] = 'theano'
import keras
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, UpSampling2D
batch_size = 128
num_classes = 10
epochs = 12
# input image dimensions
img_rows, img_cols = 28, 28
# Data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1).astype('float32') / 255
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1).astype('float32') / 255
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# Convolutional Encoder
input_img = Input(shape=(img_rows, img_cols, 1))
conv_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
pool_1 = MaxPooling2D((2, 2), padding='same')(conv_1)
conv_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool_1)
pool_2 = MaxPooling2D((2, 2), padding='same')(conv_2)
conv_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool_2)
encoded= MaxPooling2D((2, 2), padding='same')(conv_3)
# Classification
flatten = Flatten()(encoded)
fc = Dense(128, activation='relu')(flatten)
softmax = Dense(num_classes, activation='softmax', name='classification')(fc)
# Decoder
conv_4 = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
up_1 = UpSampling2D((2, 2))(conv_4)
conv_5 = Conv2D(8, (3, 3), activation='relu', padding='same')(up_1)
up_2 = UpSampling2D((2, 2))(conv_5)
conv_6 = Conv2D(16, (3, 3), activation='relu')(up_2)
up_3 = UpSampling2D((2, 2))(conv_6)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same', name='autoencoder')(up_3)
model = Model(inputs=input_img, outputs=[softmax, decoded])
model.compile(loss={'classification': 'categorical_crossentropy',
'autoencoder': 'binary_crossentropy'},
optimizer='adam',
metrics={'classification': 'accuracy'})
model.fit(x_train,
{'classification': y_train, 'autoencoder': x_train},
batch_size=batch_size,
epochs=epochs,
validation_data= (x_test, {'classification': y_test, 'autoencoder': x_test}),
verbose=1)
python绘制预测模型校准图可以使用校准曲线,因为预测一个模型校准的最简单的方法是通过一个称为“校准曲线”的图(也称为“可靠性图”,reliability diagram)。
这个方法主要是将观察到的结果通过概率划分为几类(bin)。因此,属于同一类的观测值具有相近的概率。
对于每个类,校准曲线将预测这个类的平均值,然后将预测概率的平均值与理论平均值(即观察到的目标变量的平均值)进行比较。
你只需要确定类的数量和以下两者之间的分类策略即可:
1、“uniform”,一个0-1的间隔被分为n_bins个类,它们都具有相同的宽度。
2、“quantile”,类的边缘被定义,从而使得每个类都具有相同数量的观测值。
假设你的模型具有良好的精度,则校准曲线将单调增加。但这并不意味着模型已被正确校准。实际上,只有在校准曲线非常接近等分线时(即下图中的灰色虚线),您的模型才能得到很好的校准,因为这将意味着预测概率基本上接近理论概率。
python绘制预测模型中如何解决校准错误:
假设你已经训练了一个分类器,该分类器会产生准确但未经校准的概率。概率校准的思想是建立第二个模型(称为校准器),校准器模型能够将你训练的分类器“校准”为实际概率。
因此,校准包括了将一个一维矢量(未校准概率)转换为另一个一维矢量(已校准概率)的功能。
两种常被用作校准器的方法:
1、保序回归:一种非参数算法,这种非参数算法将非递减的自由格式行拟合到数据中。行不会减少这一事实是很重要的,因为它遵从原始排序。
2、逻辑回归:现在有三种选择来预测概率:普通随机森林、随机森林 + 保序回归、随机森林 + 逻辑回归。
1、可能是光线太昏暗。
2、建议用户在光线充足的地方进行人脸识别。
3、如果用户戴着眼镜。
4、建议将眼镜摘下后再进行人脸识别。
5、如果化了妆,需要卸妆后再进行人脸识别。
6、微信人脸识别一般用于解封账号。
7、如果不能识别,建议切换其他验证方式。
8、在人脸识别页面可以点击“遇到问题,尝试其他方式”。
9、如果以上方法都不能解决问题,建议咨询微信客服官方解决。
微信人脸识别可视化的实现
DateFromWebChat (从网页版微信窗口下载好友头像)
AI (识别模块,主要用于识别好友头像是否为人脸,并且计算人脸的数量与头像的总数且return)
DateVisul (数据可视化模块,用与AI模块返回参数的可视化)
union(将整合以上三个模块的顶层模块)
知识准备
python中opencv图像处理模块的使用(主要是CascadeClassifier级联图像分类器与 detectMultiScale人脸识别函数的使用)
python中os模块的使用(主要涉及os.imread灰度图像处理与os.listdir(path)获取路径下文件这两个函数的使用)
sys模块的使用(sys.stdout.flush()缓冲器一次返回一个值)
python中Matplotlib图形框架的使用(涉及饼图plt.pie的使用与使用matplotlib.font_manager.FontProperties设置文字显示方式)