Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/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
Python 机器学习中复合分数与减法符号的区分_Python_Tensorflow_Opencv_Machine Learning_Computer Vision - Fatal编程技术网

Python 机器学习中复合分数与减法符号的区分

Python 机器学习中复合分数与减法符号的区分,python,tensorflow,opencv,machine-learning,computer-vision,Python,Tensorflow,Opencv,Machine Learning,Computer Vision,我在一个名为“手写数学评估”的项目中工作 基本上,这里有11类(0-9)和(+,-)每类包含50个干净的手写数字。然后我训练了一个CNN模型,80%的数据用于训练,20%用于模型测试,准确率为98.83%。以下是CNN模型架构的代码:- import pandas as pd import numpy as np import pickle np.random.seed(1212) import keras from keras.models import Model from ke

我在一个名为“手写数学评估”的项目中工作 基本上,这里有11类(0-9)和(+,-)每类包含50个干净的手写数字。然后我训练了一个CNN模型,80%的数据用于训练,20%用于模型测试,准确率为98.83%。以下是CNN模型架构的代码:-

import pandas as pd 
import numpy as np 
import pickle 
np.random.seed(1212) 
import keras 
from keras.models import Model 
from keras.layers import *
from keras import optimizers 
from keras.layers import Input, Dense 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.layers import Dropout 
from keras.layers import Flatten 
from keras.layers.convolutional import Conv2D 
from keras.layers.convolutional import MaxPooling2D 
from keras.utils import np_utils 
from keras import backend as K  
from keras.utils.np_utils import to_categorical 
from keras.models import model_from_json
import matplotlib.pyplot as plt
model = Sequential() 
model.add(Conv2D(30, (5, 5), input_shape =(28,28,1), activation ='relu')) 
model.add(MaxPooling2D(pool_size =(2, 2))) 
model.add(Conv2D(15, (3, 3), activation ='relu')) 
model.add(MaxPooling2D(pool_size =(2, 2))) 
model.add(Dropout(0.2)) 
model.add(Flatten()) 
model.add(Dense(128, activation ='relu')) 
model.add(Dense(50, activation ='relu')) 
model.add(Dense(12, activation ='softmax')) 
# Compile model 
model.compile(loss ='categorical_crossentropy', 
            optimizer ='adam', metrics =['accuracy']) 
model.fit(X_train, y_train, epochs=1000)
现在,数据集中的每个图像都按如下方式进行预处理:-

import cv2
im = cv2.imread(path)
im_gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret, im_th = cv2.threshold(im_gray, 90, 255, cv2.THRESH_BINARY_INV)
ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rects = [cv2.boundingRect(ctr) for ctr in ctrs]
rect = rects[0]
im_crop =im_th[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]
im_resize = cv2.resize(im_crop,(28,28))
im_resize = np.array(im_resize)
im_resize=im_resize.reshape(28,28)
我制作了一个求值函数,它可以解决简单的表达式,如7+8:-

def evaluate(im):
    s = ''
    data = []
    im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    ret, im_th = cv2.threshold(im_gray, 90, 255, cv2.THRESH_BINARY_INV)
    ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])
    boundingBoxes = [cv2.boundingRect(c) for c in ctrs]
    look_up = ['0','1','2','3','4','5','6','7','8','9','+','-'] 
    i=0
    for c in ctrs:
        rect = boundingBoxes[i]
        im_crop = im_th[rect[1]:rect[1]+rect[3], rect[0]:rect[0]+rect[2]]
        im_resize = cv2.resize(im_crop,(28,28))
        im_resize = np.array(im_resize)
        im_resize = im_resize.reshape(28,28,1)
        data.append(im_resize)
        i+=1
    data = np.array(data)
    predictions = model.predict(data)
    i=0
    while i<len(boundingBoxes):
        rect = boundingBoxes[i]
        print(rect[2],rect[3])
        print(predictions[i])
        s += look_up[predictions[i].argmax()]
        i+=1
    return s
def评估(im):
s=“”
数据=[]
im_gray=cv2.CVT颜色(im,cv2.COLOR_BGR2GRAY)
ret,im_th=cv2.阈值(im_gray,90255,cv2.阈值二进制\u INV)
ctrs,hier=cv2.findContours(im_th.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
排序的\u ctrs=sorted(ctrs,key=lambda ctr:cv2.boundingRect(ctr)[0])
BoundingBox=[cv2.boundingRect(c)表示ctrs中的c]
查找=['0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'+'、'-']
i=0
对于CTR中的c:
rect=边界框[i]
im_crop=im_th[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]
im_resize=cv2.resize(im_裁剪,(28,28))
im_resize=np.数组(im_resize)
im_resize=im_resize.重塑(28,28,1)
data.append(im_resize)
i+=1
data=np.array(数据)
预测=模型。预测(数据)
i=0

当iperhaps附加两张图像来演示问题时。如果由于调整大小而丢失信息,那么显然在调整大小之前,您需要在预处理步骤中采取一些措施来帮助保留功能。神经网络在这方面不起任何作用。或者我误解了?实际上并没有一种方法是测量轮廓的纵横比并设置一个不等式条件,但它不是非常精确