首页 > 其他分享 >kaggle竞赛_mnist_10%

kaggle竞赛_mnist_10%

时间:2022-12-22 12:31:25浏览次数:37  
标签:28 kaggle 10% add train test model mnist size

 



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




kaggle竞赛_mnist_10%_读取数据


引入必须的库​​¶​​


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)


 


 



kaggle竞赛_mnist_10%_读取数据_02


 


空数据检查​​¶​​


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])


 



 



kaggle竞赛_mnist_10%_数据_03


 


开始导入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)


 



kaggle竞赛_mnist_10%_数据_04


 


得出结果​​¶​​


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)


 


 



kaggle竞赛_mnist_10%_数据_05

 


 


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



kaggle竞赛_mnist_10%_读取数据


引入必须的库​​¶​​


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)


 


 



kaggle竞赛_mnist_10%_读取数据_02


 


空数据检查​​¶​​


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])


 



 



kaggle竞赛_mnist_10%_数据_03


 


开始导入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)


 



kaggle竞赛_mnist_10%_数据_04


 


得出结果​​¶​​


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)


 


 



kaggle竞赛_mnist_10%_数据_05

 

标签:28,kaggle,10%,add,train,test,model,mnist,size
From: https://blog.51cto.com/jsxyhelu2017/5962555

相关文章

  • POJ-1088 滑雪
    POJ-1088滑雪有一个平面区域,上面有一些点,每个点对应一定的权值,每次移动只能从当前位置向上下左右四个方向中,权值小于当前位置权值的点移动,一次性最多可以移动多远(相邻位......
  • 明德扬基于XILINX K7核心板325T/410T
    1.1产品简介MP5650核心板采用Xilinx公司Kintex-7系列的XC7K325T-2FFG900I/XC7K410T-2FFG900I作为主控制器,核心板采用4个0.5mm间距120Pin镀金连接器与母板连接,核心板四......
  • Python__10--函数结构之循环结构与嵌套结构
    1循环结构循环结构有一个循环体,循环体是一段代码。对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次。range函数range函数一般配合for循环使用range......
  • 物流扫码固定式扫描相机BXT-10M 自动分拣读码器 条码识别扫码器
    物流扫码固定式扫描相机BXT-10M自动分拣读码器条码识别扫码器 VX: orihard2014  标签: 条码识别扫码器, 自动分拣读码器, 物流扫码固定式扫......
  • ORihard KCU116E: 经济实惠的 100Gbps 网络和存储 FPGA 开发平台
    ORihardKCU116E:经济实惠的100Gbps网络和存储FPGA开发平台 ORihardKCU116E:经济实惠的100Gbps网络和存储FPGA开发平台 Kintex®UltraScale+™系列被......
  • MIT 6.1810 Lab: system calls
    Usinggdb(easy)任务:学习使用gdb来调试Xv6内核按照实验要求启动gdb,出现错误:warning:Noexecutablehasbeenspecifiedandtargetdoesnotsupportdetermining......
  • IntelliJ IDEA中我最爱的10个快捷操作
    前言欢迎关注微信公众号「JAVA旭阳」交流和学习IntelliJIDEA提供了一些Java的快捷键,同样也可以帮助我们提高日常的开发效率。关于这些快捷操作,你知道那几个呢?1.psvm......
  • Windows10/11中VirtualBox7.0安装CentOS Stream 8
    Windows10/11中VirtualBox安装CentOSStream8二.虚拟机内安装0.安装选择Testthismedia&InstallCentOSStream8-stream一).系统设置(SYSTEM)1.磁盘分区Instal......
  • django10
    forms组件渲染标签<p>forms组件渲染标签的方式1(封装程度过高扩展性差主要用于本地测试):</p>{#{{form_obj.as_p}}#}{#{{form_obj.as_ul}}#}......
  • 【AI with ML】第 10 章 :创建 ML 模型以预测序列
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......