The Progress of Products Classification

Cause now we are considering to classify the product by two kinds of features, product images, and product title. I tried to handle these two kinds of features individually, on the product title side, I used Keras build a simple RNN model for classifying 10 classes product, and I got a good result, about 98% accuracy. I test the model with some products from our site, except the title is too ambiguous I can get a proper result, the model doesn't know how to handle some combined word, e.g. 'SmartWatch'. But I found that the product images are very clear, so I wonder if I could combine these two features it wouldn't be a big problem. you can see the watch at  , and my model recognized it as a motherboard. 

On the other side, I want to build a model to classify the product images. Different from usual image classification problem, I'm going to make a classifier working on a set of images, for example, a Lenovo Laptop product would contain an image of Lenovo logo, the laptop's front and back photograph, and all images can in any order. So, I'm just doing a job with a set of non-sequential data.

Three failed attempts

1.Working on a single image and combine the result

I trained a usual classifier that accepts a single image, I wrote the model with Keras Vgg16 like before. Suppose we have 3 images, I pass each image to the model, and I got a probability distribution of all classes, assume we have 4 classes, for each image I would get a probability vector like [0.1,0.8,0.05,0.05]. Then, I use weighted average to merge all probability, and I got a problem, If I have 3 images one image is ambiguous and get a low rank on the right classes, suppose the first class is the right class[0.1,0.4,0.3,0.3], and the other two images I get a high rank in the first class [0.98,0.0001,0.003,0.016], for a human, it's very certain this product belongs to the first class, but after weighted average the probability might like[0.68,0.1,0.05,0.03].

I also try to build a simple RNN model which accepts all probability vectors, and it didn't work.

2.Combine all images into a single data block

Most product images are RGB image, from a mathematic view, it's a 3rd order tensor with shape (3,width,height), and each element in the tensor is an integer from 0 to 255.

First, I convert all images into a grayscale image, now the image's shape is (width, height), it's a matrix. I limit a max number of images as N, if the number of images is less than N, I would fill some blank images, a matrix with all elements set to zero. Second, I merge these images on the 3rd axis, after that, I got a tensor with shape (N, width, height), Finally, I build a model can accept the tensor. But I failed, I got a different result when I reorder the images.

I think the reason why I failed is after convolution and pooling layers I get a 3rd order tensor, I need to reshape the tensor to a vector and pass it to the final classifier, that's the job the Keras Flatten layer did, and it's more like a weighted average job. when I change the order of the images, I would get a different vector before the classifier.

3.Add attention mechanism to the model

As I mentioned above, the weighted average caused the problem, I want to do something prevent weighted average before Flatten layer. Attention mechanism is a new technique always be used in RNN, it can make the model learn which part is more important and pay attention to that part. I flowed keras-attention-mechanism to add the attention mechanism to my model. But I failed like before.

Attention mechanism can't promise to pass a same tensor to the classifier with a different order of images.

Some thoughts

Like this paper mentioned, I think to deal with non-sequential data, we need to use some statistics feature.

 

Three failed attempts of handling non-sequential data的更多相关文章

  1. Time Series data 与 sequential data 的区别

    It is important to note the distinction between time series and sequential data. In both cases, the ...

  2. Open-sourcing LogDevice, a distributed data store for sequential data

    https://logdevice.io/blog/2018/09/12/open-sourcing-announcement.html September 12, 2018   We are exc ...

  3. ElasticsearchException: java.io.IOException: failed to read [id:0, file:/data/elasticsearch/nodes/0/_state/global-0.st]

    from : https://www.cnblogs.com/hixiaowei/p/11213143.html 1.以前装过elasticsearch,重新安装elastic search ,报错 ...

  4. PRML读书会第十三章 Sequential Data(Hidden Markov Models,HMM)

    主讲人 张巍 (新浪微博: @张巍_ISCAS) 软件所-张巍<zh3f@qq.com> 19:01:27 我们开始吧,十三章是关于序列数据,现实中很多数据是有前后关系的,例如语音或者DN ...

  5. The Swiss Army Knife of Data Structures … in C#

    "I worked up a full implementation as well but I decided that it was too complicated to post in ...

  6. LOAD DATA INFILE Syntax--官方

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_n ...

  7. redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: 断开的管道 (Write failed)

    昨晚,包发到测试环境中,出现redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: 断开的 ...

  8. troubleshooting-执行Oozie调度Hive导数脚本抛java.io.IOException: output.properties data exceeds its limit [2048]

    执行Oozie调度Hive导数脚本抛java.io.IOException: output.properties data exceeds its limit [2048] 原因分析 shell脚本中 ...

  9. Analyzing Microarray Data with R

    1) 熟悉CEL file 从 NCBI GEO (http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE24460)下载GSE24460. 将得到 ...

随机推荐

  1. UpdatePanel 控件,客户端事件生命周期踩坑

    <script type="text/javascript" language="javascript"> Sys.WebForms.PageReq ...

  2. github 和 jupyter

    放在github上的.ipynb文件可以用jupyter nbviewer来查看和分享. nbviewer首页: http://nbviewer.jupyter.org/ 输入github的名字或网址 ...

  3. c#枚举描述

    1.枚举遍历 public enum e_Sex{ male=, female= } foreach (var value in Enum.GetValues(typeof(e_Sex)){ /* 获 ...

  4. sync.Pool的使用

    一定要搞明白sync.Pool的正确用法,避免出现以下问题: kline := this.pool.Get() defer this.pool.Put(kline) kline.UnMarshal(d ...

  5. python 11

    # 一.闭包 # # 判断:函数名.__closure__ # 若返回cell,则是闭包,返回None则不是闭包. # # 闭包:内层函数对外层函数非全局变量的引用就叫闭包. def func1(x) ...

  6. Number.toLocalString() js

    地址链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocal ...

  7. Springboot,SSM框架比较,区别

    百度搜 Springboot,SSM框架区别,大多说的都是 1.springboot一个应用是一个可执行jar 2.将原有的xml配置,简化为java配置 他们说的确实没错,可是根本没有说到本质,百度 ...

  8. Android版本28使用http请求

    Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...

  9. GitHub 优秀的项目地址

    Type LibDescription   LibLocation Android SlidingMenu   https://github.com/jfeinstein10/SlidingMenu ...

  10. vue-cli 3.0生成的项目run build后为空白页

    vue-cli 3.0 生成的项目与2.x不同,其中并没有webpack配置文件config/index.js.这个时候需要我们在项目的根目录下创建一个vue.config.js文件,代码如下: mo ...