例子参考:https://www.jiqizhixin.com/articles/2019-05-15-2

数据集:https://www.cs.ccu.edu.tw/~wtchu/projects/MoviePoster/index.html


将获取到原始数据集,其中,有三个文件,   Movie Poster Dataset是1980-2015年部分影片海报图片, Movie Poster Metadata是1980-2015年部分影片的数据详情,example:

Readme则是对 Movie Poster Metadata文件里边的字段解释,在训练过程中只用到IMPId和 Genre(影片类型)。

步骤:

  • 数据处理

获取到影片的类型对影片类型实现one-hot编码,如果是属于哪个类型,用1表示,其他为0,得到如下文件,

考虑到特征的相关性,删除影片比较少的类型列(将数量小于50的类型列进行删除),最终留下22个电影类型,如下:

将电影类型作为最终的结果值,然后加载图片:

for i in tqdm(range(train.shape[0])):  img = image.load_img('D:/aayu/实例/图像多分类/data/Images/'+train['ID'][i]+'.jpg',target_size=(400,400,3))  img = image.img_to_array(img)  img = img/255  train_image.append(img)
X = np.array(train_image)
  • 模型构建

模型是由4层卷积和3层全连接层构成,具体参数如下:

训练结果为:

  • 模型预测

新增一个复仇者联盟的海报对数据进行预测(此处可更换为任意海报数据),加载数据:

img = image.load_img('F:/aayu/图像/data/GOT.jpg',target_size=(400,400,3))
img = image.img_to_array(img)
img = img/255 

预测结果:

完整代码:


import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.utils import to_categorical
from keras.preprocessing import image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from tqdm import tqdm
#%matplotlib inline  train = pd.read_csv('F:/aayu/图像/data/multi-data.csv')print(train.head())train_image = []  for i in tqdm(range(train.shape[0])):  img = image.load_img('F:/aayu/图像/data/Images/'+train['ID'][i]+'.jpg',target_size=(400,400,3))  img = image.img_to_array(img)  img = img/255  train_image.append(img)  X = np.array(train_image)  y = np.array(train.drop(['ID', 'Genre','News','Reality-TV','Italian','Polish','Adult','Talk-Show','Spanish','Russian','Cantonese','R','PG','German','English','Japanese','Filipino','French','G','Game-Show','Hungarian'],axis=1)) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.1)  #model
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(5, 5), activation="relu", input_shape=(400,400,3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=32, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(22, activation='sigmoid'))  model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test), batch_size=64)  #precise
#加入新数据,进行测试
img = image.load_img('F:/aayu/图像/data/GOT.jpg',target_size=(400,400,3))
img = image.img_to_array(img)
img = img/255  classes = np.array(train.columns[:22])
proba = model.predict(img.reshape(1,400,400,3))
top_3 = np.argsort(proba[0])[:-4:-1]
for i in range(3):  print("{}".format(classes[top_3[i]])+" ({:.3})".format(proba[0][top_3[i]]))
plt.imshow(img)

总结:与minist数据集相比,该数据集的分类中存在一张图片多个类的情况,而minist数据集当中一张图片代表一个数字,也就是一个分类,所以图像分类和图像多分类在本质上的区别在于数据集,算法实现基本都是一样的。

(数据集正在处理中,github网址为:https://github.com/YUXUEPENG/ImageMulti-Classification.git)

图像多分类——卷积神经网络相关推荐

  1. 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]

    文章目录 0 简介 1 VGG网络 2 风格迁移 3 内容损失 4 风格损失 5 主代码实现 6 迁移模型实现 7 效果展示 8 最后 0 简介 今天学长向大家介绍一个机器视觉项目 基于深度学习卷积神 ...

  2. 在MNIST图像上训练卷积神经网络

    摘要:这是第一次接触卷积神经网络,非常顺利地运行了代码,基本了解了卷积神经网络是怎么训练的. 1.代码(有空格的是一个单元格) from keras import layers from keras ...

  3. cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...

    上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from kera ...

  4. 【神经网络】(4) 卷积神经网络(CNN),自定义网络,案例:彩色图像10分类

    各位同学大家好,今天和大家分享一下TensorFlow2.0中如何使用函数方法自定义卷积神经网络. 1. 导入数据 获取系统自带的10分类图像数据,50k张用于训练,10k张用于测试. # 10分类卷 ...

  5. 卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 参考|学术头条 编辑|极市平台 作为深度学习的代表算法之一,卷积神经 ...

  6. 论文大盘点|卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 转载自:极市平台 作为深度学习的代表算法之一,卷积神经网络(Convolution ...

  7. 大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领域

    关注极市平台公众号(ID:extrememart),获取计算机视觉前沿资讯/技术干货/招聘面经等 原文链接:大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领 ...

  8. python神经网络构建图_如何用卷积神经网络构建图像?

    原标题:如何用卷积神经网络构建图像? 原标题 |Everything you need to know to master Convolutional Neural Networks 作者 | Tir ...

  9. 论文笔记(二):基于卷积神经网络的高分辨率遥感图像上的水体识别技术

    基于卷积神经网络的高分辨率遥感图像上的水体识别技术 作者:徐文健 作者单位:浙江大学 日期:2017.01 (硕士学位论文) https://kns.cnki.net/KCMS/detail/deta ...

最新文章

  1. 你需要学好知识图谱——用AI技术连接世界
  2. linux 命令详解 二十二
  3. python如何导入txt数据集-终于找到python入门到实践数据集
  4. C++ Primer 5th笔记(chap 19 特殊工具与技术)局部类
  5. VS扩展开发 一 导航
  6. c# AseConnection的类型初始值设定项引发异常 无法加载 DLL sybdrvado11.dll 解决办法...
  7. sudo: /usr/lib/sudo/sudoers.so must be owned by uid 0
  8. 【转】wpf和winform的区别
  9. iOS 测试三方 KIF 的那些事
  10. html 模板 引用,模板引用说明
  11. 微信小程序支付有云闪付支付选项,如何关闭或开通
  12. mitmproxy+python
  13. 周伟焜:杨元庆一定会带领联想成功
  14. 联想服务器无限重启,联想台式机无限重启的解决方法
  15. 30ea什么意思_ea阶段是什么?你未必全知道!
  16. Java final与static
  17. wangEditor - 支持word上传的富文本编辑器
  18. 【论文学习】《Generalized End-to-End Loss for Speaker Verification》
  19. 人力资源数据分析师前景_人力资源数据分析师——大数据下的精英岗位
  20. Github pages + Hexo 博客 yilia 主题使用畅言评论系统

热门文章

  1. 参加 CSDN 2009 英雄大会有感(一)
  2. quantaxis中使用docker安装,出现的问题
  3. 如何迁移整个git仓库
  4. Java原子操作类AtomicInteger应用场景
  5. ride上点击用例不能显示edit信息_接口测试平台代码实现61: 多接口用例1
  6. attention机制_简析Attention机制—优缺点,实现,应用
  7. webgl获取鼠标形状_三模无线搭配对称手型设计,游戏致胜利器,ROG烈刃2无线鼠标...
  8. Django之templates模板
  9. Nginx【学习笔记】
  10. html 二级试题,计算机二级考试WEB试题及答案