kaggle竞赛_mnist_10%

简介:  主要是通过mnist了解kaggle的操作细节,最终这里的结果为:引入必须的库¶import pandas as pdimport numpy as npimport matplotlib.
 

主要是通过mnist了解kaggle的操作细节,最终这里的结果为:

引入必须的库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import seaborn as sns           #专门用于数据可视化的
%matplotlib inline

np.random.seed(2)

from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
import itertools

from keras.utils.np_utils import to_categorical # convert to one-hot-encoding
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D
from keras.optimizers import RMSprop
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ReduceLROnPlateau

 


sns设定格式

sns.set(style='white', context='notebook', palette='deep')

 

 

读取数据,两个kaggle上下载的csv已经提前放置在了固定的地方

 
train = pd.read_csv("./input/train.csv")
test = pd.read_csv("./input/test.csv")

 

 
 

数据的显示和预处理

 
Y_train = train["label"]  #获得label
X_train = train.drop(labels = ["label"],axis = 1)  #获得label以外的东西,也即是数据
del train   #没用了
g = sns.countplot(Y_train)

 

 
 
 

空数据检查

X_train.isnull().any().describe()   #isnull是所有空数据,any是进行与运算,describe其实是用来查看第一个数据是什么的

 

Out[42]:
count       784unique        1top       Falsefreq        784dtype: object
test.isnull().any().describe()    #通过这里的检查,可以发现所有数据的isnull都为false,也就是所有的地方都是有数据的

 

Out[43]:
count       784unique        1top       Falsefreq        784dtype: object
 

将mnist图片转换为浮点类型

X_train = X_train / 255.0
test = test / 255.0

 

 

将mnist图片转化为图片的大小

X_train = X_train.values.reshape(-1,28,28,1)   #这里就是按照28*28的图片大小进行压缩
test = test.values.reshape(-1,28,28,1)      #这个地方的这种写法,能够成功地将图片转化成28*28 * N的格式

 

 

准备训练数据

Y_train = to_categorical(Y_train, num_classes = 10) #onhot

 

 

即使是有test了,也要进行train的数据分割

random_seed = 2
X_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed)

 

 

打印结果,查看是否正确

g = plt.imshow(X_train[1][:,:,0])

 


 
 
 

开始导入cnn

model = Sequential()                   #序贯,关于模型的选择我还没有什么想法,我不知道从模型方面考虑怎样才能从0.9961继续往上增长

model.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', activation ='relu', input_shape = (28,28,1)))
model.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', activation ='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', activation ='relu'))
model.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', activation ='relu'))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation = "relu"))
model.add(Dropout(0.5))
model.add(Dense(10, activation = "softmax"))

 


训练准备

optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(optimizer = optimizer , loss = "categorical_crossentropy", metrics=["accuracy"])

 


学习率自动降低

learning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', patience=3, verbose=1, factor=0.5, min_lr=0.00001)
In [52]:
epochs = 28 # 训练次数
batch_size = 256

 


数据增量方法

datagen = ImageDataGenerator(
        featurewise_center=False,  # set input mean to 0 over the dataset
        samplewise_center=False,  # set each sample mean to 0
        featurewise_std_normalization=False,  # divide inputs by std of the dataset
        samplewise_std_normalization=False,  # divide each input by its std
        zca_whitening=False,  # apply ZCA whitening
        rotation_range=10,  # randomly rotate images in the range (degrees, 0 to 180)
        zoom_range = 0.1, # Randomly zoom image 
        width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
        horizontal_flip=False,  # randomly flip images
        vertical_flip=False)  # randomly flip images


datagen.fit(X_train)
In [54]:
#开始训练
history = model.fit_generator(datagen.flow(X_train,Y_train, batch_size=batch_size),
                              epochs = epochs, validation_data = (X_val,Y_val),
                              verbose = 2, steps_per_epoch=X_train.shape[0] // batch_size
                              , callbacks=[learning_rate_reduction])

 


绘制曲线

fig, ax = plt.subplots(2,1)
ax[0].plot(history.history['loss'], color='b', label="Training loss")
ax[0].plot(history.history['val_loss'], color='r', label="validation loss",axes =ax[0])
legend = ax[0].legend(loc='best', shadow=True)

ax[1].plot(history.history['acc'], color='b', label="Training accuracy")
ax[1].plot(history.history['val_acc'], color='r',label="Validation accuracy")
legend = ax[1].legend(loc='best', shadow=True)

 


 

得出结果

results = model.predict(test)
results = np.argmax(results,axis = 1)
results = pd.Series(results,name="Label")
submission = pd.concat([pd.Series(range(1,28001),name = "ImageId"),results],axis = 1)
submission.to_csv("mnist_kaggle_jsxyhelu.csv",index=False)

 

最后要把 mnist_kaggle_jsxyhelu.csv上传上去
 

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
缓存 中间件 测试技术
SOME/IP协议实践指南:精选开发与测试工具解析
SOME/IP协议实践指南:精选开发与测试工具解析
712 0
|
安全 NoSQL 关系型数据库
使用cnpm搭建企业内部私有NPM仓库
cnpm是企业内部搭建npm镜像和私有npm仓库的开源方案。它同时解决了现有npm架构的一些问题。
1138 0
使用cnpm搭建企业内部私有NPM仓库
|
存储 运维 监控
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
通过对各个业务线实时需求的调研了解到,当前实时数据处理场景是各个业务线基于Java服务独自处理的。各个业务线实时能力不能复用且存在计算资源的扩展性问题,而且实时处理的时效已不能满足业务需求。鉴于当前大数据团队数据架构主要解决离线场景,无法承接更多实时业务,因此我们需要重新设计整合,从架构合理性,复用性以及开发运维成本出发,建设一套通用的大数据实时数仓链路。本次实时数仓建设将以游戏运营业务为典型场景进行方案设计,综合业务时效性、资源成本和数仓开发运维成本等考虑,我们最终决定基于Flink + Hudi + Hologres来构建阿里云云原生实时湖仓,并在此文中探讨实时数据架构的具体落地实践。
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
|
IDE Java API
Kettle如何进行二次开发?
【10月更文挑战第24天】Kettle如何进行二次开发?
814 0
|
12月前
|
机器学习/深度学习 算法 数据挖掘
量子计算在金融领域的应用探索
量子计算凭借其强大的计算能力和数据处理能力,正逐渐在金融领域展现巨大潜力。本文探讨了量子计算在风险管理、投资组合优化、高频交易、反欺诈及金融衍生品定价等方面的应用,介绍了当前进展及未来挑战,展示了量子计算如何提升金融决策效率和准确性。
|
人工智能 开发框架 算法
《C++巧筑智能框架根基:开启 AI 开发新航道》
在科技飞速发展的今天,C++作为高效强大的编程语言,在构建人工智能开发框架基础架构中扮演着重要角色。本文探讨如何利用C++的优势,从数据处理、模型构建、训练及评估等模块出发,打造稳定、高效的AI开发框架,支持计算密集型任务,促进人工智能技术的发展与应用。
332 8
|
机器学习/深度学习 人工智能 运维
智能化运维:未来技术趋势与挑战
随着信息技术的飞速发展,智能化已成为推动运维领域进步的重要力量。本文将深入探讨智能化运维的核心技术、面临的挑战以及未来的发展趋势。通过分析当前运维自动化的实践案例和智能算法的应用,揭示智能化运维如何优化系统性能、提高资源利用率,并预测其对未来IT基础设施的影响。文章旨在为读者提供对智能化运维全面而深入的理解,并为运维专业人士指出未来发展的方向。
548 0
技术经验解读:不知道怎样计算权重?告诉你8种确定权重方法
技术经验解读:不知道怎样计算权重?告诉你8种确定权重方法
|
SQL 关系型数据库 MySQL
关系型数据库使用 DELETE 语句删除
`DELETE` SQL 语句用于从关系型数据库表中删除记录。可删除所有记录(如 `DELETE FROM students;`)或依据条件(如 `DELETE FROM students WHERE age > 25;`)。某些数据库支持使用 `OUTPUT` 或 `RETURNING` 子句返回被删除记录。还能通过子查询(如基于 `failed_exams` 删除 `students` 表记录)及触发器配合执行。注意,`DELETE` 在事务中执行,需谨慎操作并确保数据备份。
488 1
|
前端开发 安全 Java
springboot统一验证码组件设计(一)
springboot统一验证码组件设计
483 1
springboot统一验证码组件设计(一)