实战一维卷积(Conv1D):kaggle叶子分类问题

通过例子理解:
(1)一维卷积是如何工作的;
(2)输入数据是如何构建的;
在csv文件中,数据集或者特征集的保存方式nxm,其中n为样本个数,m为特征个数。这里有3类特征,64个magin特征, 64个shape特征, 64个texture特征。m=192.


这里有一篇比较详细解释代码的博客:用Keras实现简单一维卷积 ,亲测可用一维卷积实例,及Kaggle竞赛代码解读
需要的数据可以在kaggle上下载,上面的那篇文章也有下载链接。


直接看代码:

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import StratifiedShuffleSplit
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten, Convolution1D, Dropout
from keras.optimizers import SGD
from keras.utils import np_utilstrain = pd.read_csv('../input/train.csv')
test = pd.read_csv('../input/test.csv')def encode(train, test):label_encoder = LabelEncoder().fit(train.species)labels = label_encoder.transform(train.species)classes = list(label_encoder.classes_)train = train.drop(['species', 'id'], axis=1)test = test.drop('id', axis=1)return train, labels, test, classestrain, labels, test, classes = encode(train, test)# standardize train features
scaler = StandardScaler().fit(train.values)
scaled_train = scaler.transform(train.values)# split train data into train and validation
sss = StratifiedShuffleSplit(test_size=0.1, random_state=23)
for train_index, valid_index in sss.split(scaled_train, labels):X_train, X_valid = scaled_train[train_index], scaled_train[valid_index]y_train, y_valid = labels[train_index], labels[valid_index]nb_features = 64 # number of features per features type (shape, texture, margin)
nb_class = len(classes)# reshape train data
X_train_r = np.zeros((len(X_train), nb_features, 3))
X_train_r[:, :, 0] = X_train[:, :nb_features]
X_train_r[:, :, 1] = X_train[:, nb_features:128]
X_train_r[:, :, 2] = X_train[:, 128:]# reshape validation data
X_valid_r = np.zeros((len(X_valid), nb_features, 3))
X_valid_r[:, :, 0] = X_valid[:, :nb_features]
X_valid_r[:, :, 1] = X_valid[:, nb_features:128]
X_valid_r[:, :, 2] = X_valid[:, 128:]# Keras model with one Convolution1D layer
# unfortunately more number of covnolutional layers, filters and filters lenght
# don't give better accuracy
model = Sequential()
model.add(Convolution1D(nb_filter=512, filter_length=1, input_shape=(nb_features, 3)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dropout(0.4))
model.add(Dense(2048, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(nb_class))
model.add(Activation('softmax'))y_train = np_utils.to_categorical(y_train, nb_class)
y_valid = np_utils.to_categorical(y_valid, nb_class)sgd = SGD(lr=0.01, nesterov=True, decay=1e-6, momentum=0.9)
model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])nb_epoch = 15
model.fit(X_train_r, y_train, nb_epoch=nb_epoch, validation_data=(X_valid_r, y_valid), batch_size=16)

输出:

Using TensorFlow backend.
Train on 891 samples, validate on 99 samples
Epoch 1/15
891/891 [==============================] - 72s - loss: 4.3931 - acc: 0.0976 - val_loss: 3.6244 - val_acc: 0.4040
Epoch 2/15
891/891 [==============================] - 71s - loss: 1.8143 - acc: 0.6375 - val_loss: 0.4019 - val_acc: 0.9091
Epoch 3/15
891/891 [==============================] - 74s - loss: 0.2671 - acc: 0.9405 - val_loss: 0.2921 - val_acc: 0.9091
Epoch 4/15
891/891 [==============================] - 77s - loss: 0.0977 - acc: 0.9798 - val_loss: 0.2581 - val_acc: 0.9495
Epoch 5/15
891/891 [==============================] - 78s - loss: 0.0496 - acc: 0.9955 - val_loss: 0.0563 - val_acc: 0.9899
Epoch 6/15
891/891 [==============================] - 75s - loss: 0.0074 - acc: 1.0000 - val_loss: 0.0807 - val_acc: 0.9697
Epoch 7/15
891/891 [==============================] - 73s - loss: 0.0068 - acc: 0.9978 - val_loss: 0.0781 - val_acc: 0.9798
Epoch 8/15
891/891 [==============================] - 78s - loss: 0.0124 - acc: 0.9966 - val_loss: 0.0547 - val_acc: 0.9899
Epoch 9/15
891/891 [==============================] - 77s - loss: 0.0079 - acc: 0.9978 - val_loss: 0.0584 - val_acc: 0.9798
Epoch 10/15
891/891 [==============================] - 73s - loss: 0.0031 - acc: 1.0000 - val_loss: 0.0624 - val_acc: 0.9798
Epoch 11/15
891/891 [==============================] - 75s - loss: 0.0090 - acc: 0.9978 - val_loss: 0.0514 - val_acc: 0.9899
Epoch 12/15
891/891 [==============================] - 79s - loss: 0.0046 - acc: 0.9989 - val_loss: 0.0557 - val_acc: 0.9899
Epoch 13/15
891/891 [==============================] - 78s - loss: 0.0020 - acc: 1.0000 - val_loss: 0.0516 - val_acc: 0.9899
Epoch 14/15
891/891 [==============================] - 76s - loss: 0.0013 - acc: 1.0000 - val_loss: 0.0505 - val_acc: 0.9899
Epoch 15/15
891/891 [==============================] - 72s - loss: 0.0013 - acc: 1.0000 - val_loss: 0.0512 - val_acc: 0.9899
<keras.callbacks.History at 0x7f8a3c099550>


转自 : Alex Lazarev Simple Keras 1D CNN + features split

Keras实现一维卷积(Conv1D)实例相关推荐

  1. 【keras】一维卷积神经网络多分类

    刚刚接触到深度学习,前2个月的时间里,我用一维的卷积神经网络实现了对于一维数据集的分类和回归.由于在做这次课题之前,我对深度学习基本上没有过接触,所以期间走了很多弯路. 在刚刚收到题目的要求时,我选择 ...

  2. python中的一维卷积conv1d和二维卷积conv2d

    先来看二维卷积conv2d conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC& ...

  3. tensorflow一维卷积输入_tensorflow中一维卷积conv1d处理语言序列的一点记录

    工作中用卷积方法进行自然语言处理(NLP)相关任务,用到了tensorflow中的一些函数及方法: tf.nn.conv1d tf.layters.conv1d 用cov2d实现cov1d 两种池化操 ...

  4. 使用lasagne进行一维卷积conv1d

    具体看下面的实现,实现对多个句子进行一维卷积,并使用dandelion实现时间维度上的maxpooling. # 学习使用lasagne 结合dandelion 进行卷积,并在时间维度上进行max p ...

  5. python卷积神经网络回归预测_回归[keras]的一维卷积神经网络,做

    在上一篇博客里我介绍了如何利用keras对一个给定的数据集来完成多分类任务. 100%的分类准确度验证了分类模型的可行性和数据集的准确度. 在这篇博客当中我将利用一个稍加修改的数据集来完成线性回归任务 ...

  6. 自然语言处理--keras实现一维卷积网络对IMDB 电影评论数据集构建情感分类器

    为什么在 NLP 分类任务中选择 CNN 呢? 1.CNN神经网络可以像处理图像一样处理文本并"理解"它们 2.主要好处是高效率 3.在许多方面,由于池化层和卷积核大小所造成的限制 ...

  7. 一维卷积Conv1D

    1D 卷积层 (例如时序卷积). 该层创建了一个卷积核,该卷积核以 单个空间(或时间)维上的层输入进行卷积, 以生成输出张量. 如果 use_bias 为 True, 则会创建一个偏置向量并将其添加到 ...

  8. 基于一维卷积Conv1D实现猫狗叫声语音识别

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  9. tf.keras.layers.Conv1D 一维卷积 示例

    tf.keras.layers.Conv1D 一维卷积 示例 import tensorflow as tf from tensorflow import keras import numpy as ...

最新文章

  1. 奇妙的Base64编码
  2. Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出
  3. centos+nginx+php+mysql(经典架构流程案例)
  4. html5 vr效果,HTML5 Three.js 虚拟现实小实验(VR Experiment)
  5. uboot的readme导读(转)
  6. mysql数据库获得时间段内数据_mysql 获取规定时间段内的统计数据
  7. python3导入ssl报错_python3中pip3安装出错,找不到SSL的解决方式
  8. 第三十九讲:tapestry 页面加载等待过程(ProgressiveDisplay)组件
  9. ​老男孩教育每日一题-第73天 -基础命令点:可恶的^C
  10. 合肥工业大学数值分析(计算方法)满分实验代码(python实现)
  11. 阳光动力2号太阳能飞机的基本工作原理
  12. imagej得到灰度图数据_imageJ 使用教程之样本长度测量
  13. mysql 拼音查询_MySQL拼音首字母查询
  14. 30个让你大呼惊艳的数据可视化作品!
  15. SCL教程之如何使用SCL创建简单控制程序
  16. 解决Visual Studio 2017 无法启动程序,系统找不到指定文件
  17. 宏碁E1-471G笔记本固态启动盘问题
  18. 股票世界观-招财大牛猫公众号整理
  19. Repeated measures ANOVA with R
  20. 让我们恭喜阿根廷队夺得大力神杯

热门文章

  1. 除了量子计算机还有什么,被西方称为中国新“霸权”的量子计算机,除了波色采样还会什么?...
  2. win10系统盘制作和 ubuntu 20 装机体验之旅: Nouveau 禁用、Cuda安装
  3. 10_ue4进阶_添加倒地和施法动作
  4. 模仿天猫网站-前端项目
  5. dscp值_DSCP 与IP 优先级
  6. UI设计、交互设计、UI交互设计的联系和区别是什么?
  7. 高中学历能学python_高中学历学完Python就能干人工智能?后院活动部
  8. [每日100问][2011-10-07]iphone开发笔记,今天你肿了么
  9. squish+privoxy+ssh(socks5)
  10. 从零开始搭建vue项目,并使用git管理