深度學習實戰筆記一:google colab使用入門+mnist數據集入門+Dense層預測

首先kexue上網,進入google雲端硬盤
新建->更多->Google Colaboratory
在這裏插入圖片描述
創建了一個新的.ipynb文件
在這裏插入圖片描述
可修改該文件的名稱
在這裏插入圖片描述
使用google colab的GPU
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

運行代碼,點擊鏈接,操作後粘貼碼到下面方框中,回車
from google.colab import drive
drive.mount(’/content/drive/’)

在這裏插入圖片描述
下面圖片表示與google drive連接成功
在這裏插入圖片描述
運行以上兩句代碼後,在google colab中可以訪問到google drive的文件

示例:

target=processimage.imread("/content/drive/My Drive/app/my_image/test5.jpg")

該圖片位於一個名字爲app的文件夾裏的my_image文件夾
google drive的
使用‘ls’命令查看文件夾的內容

ls '/content/drive/My Drive/app/my_image' 

更改工作目錄

因爲有些時候,我們可能會直接運行github上別人的代碼,而這些代碼的路徑一般寫的是相對路徑,google colab運行的時候需要查找絕對路徑,使用以下方法可以更改工作目錄,避免我們在運行別人項目時需要打開項目修改路徑:
(下面的代碼中,需要運行的super-resolution.ipynb是在google drive裏/Colab_Test/deep-image-prior/目錄下)

import os
path = "/content/drive/My Drive/Colab_Test/deep-image-prior/"
os.chdir(path) 
os.listdir(path)
!ls

`
.

以下是觀看up主Mike高的視頻筆記:

import numpy as np
from keras.datasets import mnist
from keras.models import Sequential,Model
from keras.layers.core import Dense,Activation,Dropout
from keras.utils import np_utils

import matplotlib.pyplot as plt
import matplotlib.image as processimage

#load mnist RAW dataset拉取原始數據
(X_train,Y_train),(X_test,Y_test)=mnist.load_data()
print(X_train.shape,Y_train.shape)
print(X_test.shape,Y_test.shape)

#準備數據
#因爲使用的是全連接層,不認識矩陣,只認識向量
#所以需要把數據準備成神經網絡需要的數據

X_train = X_train.reshape(60000,28*28)
X_test = X_test.reshape(10000,28*28)
#print(X_train)#可以看到X_train中都是整數,因爲使用小數收斂更好,所以可以改成小數

#把所有的數據設置成浮點型

#使用類型設置函數:astype,“set as type" 
X_train = X_train.astype('float32') 
X_test = X_test.astype('float32')

#print(X_train) #打印出來的數據帶有小數點,但是其實只是整數加了一個小數點

#歸一化,將整數變成真正的小數

#因爲顏色總數是255
#這樣所有的值都變成了0.幾
X_train = X_train/255  
#print(X_train)
#打印train中的某個向量
#print(X_train[9999])

X_test /=255

#prepare basic seups
#給神經網絡配置基本參數
batch_size = 1024 #每次要從60000條數據中拿出多少條數據來進行訓練

#batch_size會影響精度

nb_class = 10 #要訓練幾個類
nb_epochs = 4 #類似於 for i in range(4)

#class vectors[0,0,0,0,0,0,0,0,1,0]
print(Y_test.shape)
Y_test = np_utils.to_categorical(Y_test,nb_class)
Y_train = np_utils.to_categorical(Y_train,nb_class)

#print(Y_test[9999])
print(Y_test.shape)


#設置網絡結構
model = Sequential()
#1st layer
#設置輸出512維,因爲是第一層所以要有輸入維度
model.add(Dense(512,input_shape=(784,))) #input_dim = 784,
#(784,)表示(784,1),一行數據有784列
#model.add(Activiation('relu'))
model.add(Activation('relu'))
#Dropout從現有網絡中拿掉一些數據,防止過擬合
model.add(Dropout(0.2))

#設置第二層
#第二層的輸入是從第一層得到的,不需要再設置輸入維度
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.2))

#設置第三層
model.add(Dense(10))
#softmax主要用於分類
model.add(Activation('softmax'))

#編譯
model.compile(
    loss='categorical_crossentropy',
    optimizer='rmsprop',
    metrics=['accuracy'],
)

#啓動網絡訓練
Trainning = model.fit(
    X_train,Y_train,
    batch_size = batch_size,
    epochs=  nb_epochs,
    validation_data =(X_test,Y_test),
    #取消訓練進度條
    verbose = 2,
)

#打印每次訓練的結果
Trainning.history

#打印整個網絡的設置
Trainning.params


#拉去test裏的圖
testrun = X_test[9999].reshape(1,784)
#如果這裏直接寫testrun = X_test[9999],沒有reshape的話,下面預測的時候會有輸入錯誤
#print(testrun)
testlabel = Y_test[9999]
print('label:->>',testlabel)
print(testrun.shape)
plt.imshow(testrun.reshape([28,28]))

#判定輸出結果
pred = model.predict(testrun)
print('label of test sample Y_test[9999]->>',testlabel)
print('預測結果->>',pred)
#找出最大值下標
print([i.argmax() for i in pred])
a = [i.argmax() for i in pred]
print(a)

#用自己的圖片預測一下


target=processimage.imread("/content/drive/My Drive/app/my_image/test5.jpg")
print(target.shape)

plt.imshow(target)
#數據預處理
target_img = target.reshape(1,784)
#把圖片數據轉換爲數組
target_img = np.array(target_img)

target_img = target_img.astype('float32')
target_img/=255

print(target_img)

pred = model.predict(target_img)
#print('預測結果:->',pred)
print([myfinal.argmax() for myfinal in pred ])

print(pred)


代碼運行結果:

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

拉取的test[9999]的圖:
在這裏插入圖片描述
用模型預測test[9999]
在這裏插入圖片描述

用自己的圖片預測(PS自己創造的28*28的灰度圖):
在這裏插入圖片描述

另附:google colab的快捷鍵

多行註釋:ctrl+/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章