- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在按照此站点上的代码进行操作:
https://blog.luisfred.com.br/reconhecimento-de-escrita-manual-com-redes-neurais-convolucionais/
以下是该网站遍历的代码:
from keras. datasets import mnist
from keras. models import Sequential
from keras. layers import Dense
from keras. layers import Dropout
from keras. layers import Flatten
import numpy as np
from matplotlib import pyplot as plt
from keras. layers . convolutional import Conv2D
from keras. layers . convolutional import MaxPooling2D
from keras. utils import np_utils
from keras import backend as K
K . set_image_dim_ordering ( 'th' )
import cv2
import matplotlib. pyplot as plt
#% inline matplotlib # If you are using Jupyter, it will be useful for plotting graphics or figures inside cells
#Divided the data into subsets of training and testing.
( X_train , y_train ) , ( X_test , y_test ) = mnist. load_data ( )
# Since we are working in gray scale we can
# set the depth to the value 1.
X_train = X_train . reshape ( X_train . shape [ 0 ] , 1 , 28 , 28 ) . astype ( 'float32' )
X_test = X_test . reshape ( X_test . shape [ 0 ] , 1 , 28 , 28 ) . astype ( 'float32' )
# We normalize our data according to the
# gray scale. The floating point values are in the range [0,1], instead of [.255]
X_train = X_train / 255
X_test = X_test / 255
# Converts y_train and y_test, which are class vectors, to a binary class array (one-hot vectors)
y_train = np_utils. to_categorical ( y_train )
y_test = np_utils. to_categorical ( y_test )
# Number of digit types found in MNIST. In this case, the value is 10, corresponding to (0,1,2,3,4,5,6,7,8,9).
num_classes = y_test. shape [ 1 ]
def deeper_cnn_model ( ) :
model = Sequential ( )
# Convolution2D will be our input layer. We can observe that it has
# 30 feature maps with size of 5 × 5 and an activation function of type ReLU.
model.add ( Conv2D ( 30 , ( 5 , 5 ) , input_shape = ( 1 , 28 , 28 ) , activation = 'relu' ) )
# The MaxPooling2D layer will be our second layer where we will have a sample window of size 2 x 2
model.add ( MaxPooling2D ( pool_size = ( 2 , 2 ) ) )
# A new convolutional layer, with 15 feature maps of size 3 × 3, and activation function ReLU
model.add ( Conv2D ( 15 , ( 3 , 3 ) , activation = 'relu' ) )
# A new subsampling with a 2x2 dimension pooling.
model.add ( MaxPooling2D ( pool_size = ( 2 , 2 ) ) )
# We include a dropout with a 20% probability (you can try other values)
model.add ( Dropout ( 0.2 ) )
# We need to convert the output of the convolutional layer, so that it can be used as input to the densely connected layer that is next.
# What this does is "flatten / flatten" the structure of the output of the convolutional layers, creating a single long vector of features
# that will be used by the Fully Connected layer.
model.add ( Flatten ( ) )
# Fully connected layer with 128 neurons.
model.add ( Dense ( 128 , activation = 'relu' ) )
# Followed by a new fully connected layer with 64 neurons
model.add ( Dense ( 64 , activation = 'relu' ) )
# Followed by a new fully connected layer with 32 neurons
model.add ( Dense ( 32 , activation = 'relu' ) )
# The output layer has the number of neurons compatible with the
# number of classes to be obtained. Notice that we are using a softmax activation function,
model.add ( Dense ( num_classes, activation = 'softmax' , name = 'preds' ) )
# Configure the entire training process of the neural network
model.compile ( loss = 'categorical_crossentropy' , optimizer = 'adam' , metrics = [ 'accuracy' ] )
return model
model = deeper_cnn_model ( )
model.summary ( )
model.fit ( X_train , y_train, validation_data = ( X_test , y_test ) , epochs = 10 , batch_size = 200 )
scores = model. evaluate ( X_test , y_test, verbose = 0 )
print ( "\ nacc:% .2f %%" % (scores [1] * 100))
###enhance to check multiple numbers after the training is done
img_pred = cv2. imread ( 'five.JPG' , 0 )
plt.imshow(img_pred, cmap='gray')
# forces the image to have the input dimensions equal to those used in the training data (28x28)
if img_pred. shape != [ 28 , 28 ] :
img2 = cv2. resize ( img_pred, ( 28 , 28 ) )
img_pred = img2. reshape ( 28 , 28 , - 1 ) ;
else :
img_pred = img_pred. reshape ( 28 , 28 , - 1 ) ;
# here also we inform the value for the depth = 1, number of rows and columns, which correspond 28x28 of the image.
img_pred = img_pred. reshape ( 1 , 1 , 28 , 28 )
pred = model. predict_classes ( img_pred )
pred_proba = model. predict_proba ( img_pred )
pred_proba = "% .2f %%" % (pred_proba [0] [pred] * 100)
print ( pred [ 0 ] , "with probability of" , pred_proba )
最后,我尝试对我绘制和导入的数字 5 进行预测(我也尝试过其他手绘数字,但结果同样不佳):
img_pred = cv2. imread ( 'five.JPG' , 0 )
plt.imshow(img_pred, cmap='gray')
# forces the image to have the input dimensions equal to those used in the training data (28x28)
if img_pred. shape != [ 28 , 28 ] :
img2 = cv2. resize ( img_pred, ( 28 , 28 ) )
img_pred = img2. reshape ( 28 , 28 , - 1 ) ;
else :
img_pred = img_pred. reshape ( 28 , 28 , - 1 ) ;
# here also we inform the value for the depth = 1, number of rows and columns, which correspond 28x28 of the image.
img_pred = img_pred. reshape ( 1 , 1 , 28 , 28 )
pred = model. predict_classes ( img_pred )
pred_proba = model. predict_proba ( img_pred )
pred_proba = "% .2f %%" % (pred_proba [0] [pred] * 100)
print ( pred [ 0 ] , "with probability of" , pred_proba )
这是 5.jpg:
但是当我输入自己的数字时,模型预测错误。对于为什么会这样有什么想法吗?我承认我是机器学习新手,刚刚开始涉足它。我的想法是图像的居中或图像的标准化可能已关闭?非常感谢任何帮助!
编辑1:
MNIST 测试编号将如下所示:
最佳答案
您似乎有两个问题,正如您怀疑的那样,这两个问题与数据的预处理有关。
第一个是你的图像相对于训练数据是倒置的:
img_pred = cv2 读取 .jpg 的一个 channel 后。 imread ( ' Five.JPG' , 0 )
,背景像素接近白色,值在 215-238 附近。 X_train
中的训练数据,背景像素全部为零,数字为白色或接近白色(上部 210-255)。尝试在 X_train
中的一些选择旁边绘制图像,您会看到它们是倒置的。
另一个问题是 cv2.resize()
中的默认插值不会保留数据的缩放比例。调整数据大小后,最小值会跳至 60,而不是 0。比较 img.pred.min()
和 img.pred.max()
的值> 重新调整步骤之前和之后。
您可以使用如下函数反转和缩放数据,使其看起来更像 MNIST 输入数据:
def mnist_bytescale(image):
# Use float for rescaling
img_temp = image.astype(np.float32)
#Re-zero the data
img_temp -= img_temp.min()
#Re-scale and invert
img_temp /= (img_temp.max()-img_temp.min())
img_temp *= 255
return 255 - img_temp.astype('uint')
这将翻转您的数据,并将其从 0 线性缩放到 255,就像网络正在训练的数据一样。但是,如果您绘制 mnist_bytescale(img_pred)
,您会注意到大多数像素中的背景级别仍然不完全为 0,因为原始图像的背景级别不是恒定的(可能是由于 JPEG 压缩) 。)如果您的网络仍然存在此翻转和缩放数据的问题,您可以尝试使用 np.clip将背景水平清零,看看是否有帮助。
关于Python机器学习数字识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49741671/
我使用的是linux的windows子系统,安装了ubuntu,bash运行流畅。 我正在尝试使用make,似乎bash 无法识别gcc。尝试将其添加到 PATH,但没有任何改变。奇怪的是 - cmd
ImageMagick 已正确安装。 WAMP 的“PHP 扩展”菜单也显示带有勾选的 php_imagick。除了 Apache 和系统环境变量外,phpinfo() 没有显示任何 imagick
我是这么想的,因为上限是 2^n,并且考虑到它们都是有限机,n 状态 NFA 和具有 2^n 或更少状态的 DFA 的交集将是有效。 我错了吗? 最佳答案 你是对的。 2^n 是一个上限,因此生成的
我有一个大型数据集,其中包含每日值,指示一年中的特定一天是否特别热(用 1 或 0 表示)。我的目标是识别 3 个或更多特别炎热的日子的序列,并创建一个包含每个日子的长度以及开始和结束日期的新数据集。
我有一个向量列表,每个向量看起来像这样 c("Japan", "USA", "country", "Japan", "source", "country", "UK", "source", "coun
是否有任何工具或方法可以识别静态定义数组中的缓冲区溢出(即 char[1234] 而不是 malloc(1234))? 昨天我花了大部分时间来追踪崩溃和奇怪的行为,最终证明是由以下行引起的: // e
我一直在尝试通过导入制表符分隔的文件来手动创建 Snakemake 通配符,如下所示: dataset sample species frr PRJNA493818_GSE120639_SRP1628
我一直在尝试通过导入制表符分隔的文件来手动创建 Snakemake 通配符,如下所示: dataset sample species frr PRJNA493818_GSE120639_SRP1628
我想录下某人的声音,然后根据我获得的关于他/她声音的信息,如果那个人再次说话,我就能认出来!问题是我没有关于哪些统计数据(如频率)导致人声差异的信息,如果有人可以帮助我如何识别某人的声音? 在研究过程
我希望我的程序能够识别用户何时按下“enter”并继续循环播放。但是我不知道如何使程序识别“输入”。尝试了两种方法: string enter; string ent = "\n"; dice d1;
我创建了这个带有一个参数(文件名)的 Bash 小脚本,该脚本应该根据文件的扩展名做出响应: #!/bin/bash fileFormat=${1} if [[ ${fileFormat} =~ [F
我正在寻找一种在 for 循环内迭代时识别 subview 对象的方法,我基本上通过执行 cell.contentView.subviews 从 UITableView 的 contentView 获
我正在尝试在 Swift 中使用 CallKit 来识别调用者。 我正在寻找一种通过发出 URL 请求来识别调用者的方法。 例如:+1-234-45-241 给我打电话,我希望它向 mydomain.
我将(相当古老的)插件称为“thickbox”,如下所述: 创建厚盒时,它包含基于查询的内容列表。 使用 JavaScript 或 jQuery,我希望能够访问 type 的值(在上面的示例中 t
我想编写一些可以接受某种输入并将其识别为方波、三角波或某种波形的代码。我还需要一些产生所述波的方法。 我确实有使用 C/C++ 的经验,但是,我不确定我将如何模拟所有这些。最终,我想将其转换为微 Co
我创建了一个 for 循环,用于在每个部分显示 8 个项目,但我试图在循环中识别某些项目。例如,我想识别前两项,然后是第五项和第六项,但我的识别技术似乎是正确的。 for (int i = 0; i
如何识别 UIStoryboard? 该类具有创建和实例化的方法,但我没有看到带有类似name 的@property。例如 获取 Storyboard对象 + storyboardWithName:b
如何确定所运行的SQLServer2005的版本 要确定所运行的SQLServer2005的版本,请使用SQLServerManagementStudio连接到SQLServer2005,然后运行
这个问题在这里已经有了答案: How to check whether an object is a date? (26 个答案) 关闭2 年前。 我正在使用一个 npm 模块,它在错误时抛出一个空
我正在制作一个使用 ActivityRecognition API 在后台跟踪用户 Activity 的应用,如果用户在指定时间段(例如 1 小时)内停留在同一个地方,系统就会推送通知告诉用户去散步.
我是一名优秀的程序员,十分优秀!