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. 基本的java加密算法MD5等等

    简单的java加密算法有: BASE64       严格地说,属于编码格式,而非加密算法 MD5             (Message Digest algorithm 5,信息摘要算法) SH ...

  2. sync.Pool的使用

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

  3. 转发: 探秘Java中的String、StringBuilder以及StringBuffer

    原文地址 探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家 ...

  4. 什么是混合app?

    APP混合模式和原生模式的优劣 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-06-27 每当你打算开发移动应用程序时,都要考虑你的应用如何创建以及如何部署 ...

  5. reset()方法的使用、jq下面reset()的正确使用方法

    reset()是 原生js的的方法,所有浏览器都支持,而且必须是form元素包括下的表单元素,但是JQuery中没有reset方法, 效果图:  错误用法: 正确用法: js用法: document. ...

  6. UIImageView自适应图片大小

    窗口大小获取: CGRect screenBounds = [ [UIScreenmainScreen]bounds];//返回的是带有状态栏的Rect CGRect rect = [ [UIScre ...

  7. AJAX 应用

    ajax简介 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.Ajax不是一种新的编程语言, ...

  8. mininet的学习之二-----miniedit可视化

    安装ryu git clone git://github.com/osrg/ryu.git cd ./ryu  sudo python setup.py install mininet可视化 git ...

  9. java数组的声明、创建和遍历

    一.数组的声明.创建 1.一维数组 先是声明 dataType[] arrayRefVar; // 首选的方法 数据类型[] 数组名; dataType arrayRefVar[]; // 效果相同, ...

  10. Spring-Cloud-Netflix

    Spring Cloud Netflix组件以及部署 (1)Eureka,服务注册和发现,它提供了一个服务注册中心.服务发现的客户端,还有一个方便的查看所有注册的服务的界面. 所有的服务使用Eurek ...