Keras學習筆記一:修改數據讀入方式為本地圖片讀入


第一種方法:

Keras官方給的圖片去噪示例要自動下載mnist數據集並處理,不能修改和加入自己的數據集。

from keras.datasets import mnist
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.

以上代碼實現了把mnist數據集讀到x_train 和x_test 中並且丟棄標簽,全過程是封閉的

現需要將本地的mnist數據集,解壓成圖片格式,然后通過文件操作把圖片一個一個讀進去同樣存在x_train 和x_test 中,並且能和原來的程序完美銜接。

修改如下:

mnist數據集放到和py文件同一個目錄,名為MNIST_data,將下載的二進制文件轉為圖片見 https://www.cnblogs.com/dzzy/p/10824072.html

目錄樹如圖

import os

base_dir = 'MNIST_data' #基准目錄
train_dir = os.path.join(base_dir,'mnist_train') #train目錄 #file1 = os.listdir(train_dir) #讀目錄下的圖 #image1 = [os.path.join(train_dir,i) for i in file1] #合成每一個圖的路徑名稱
validation_dir="".join(train_dir) test_datagen = ImageDataGenerator(rescale= 1./255) validation_generator = test_datagen.flow_from_directory(validation_dir, target_size = (28,28), color_mode = "grayscale", batch_size = 60000, class_mode =  "categorical") #利用test_datagen.flow_from_directory(圖像地址,單通道,目標size,批量數目,標簽分類情況)
for x_train,batch_labels in validation_generator: break test_dir = os.path.join(base_dir,'mnist_test') #test目錄 #file2 = os.listdir(test_dir) #讀目錄下的圖 #image2 = [os.path.join(test_dir,i) for i in file2] #合成每一個圖的路徑名稱
validation_dir="".join(test_dir) test_datagen = ImageDataGenerator(rescale= 1./255) validation_generator = test_datagen.flow_from_directory(validation_dir, target_size = (28,28), color_mode = "grayscale", batch_size = 10000, class_mode = "categorical") #利用test_datagen.flow_from_directory(圖像地址,單通道,目標size,批量數目,標簽分類情況) 

for x_test,batch_labels in validation_generator:
  break


#創造有噪聲的圖像

noise_factor = 0.5
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape)

x_train_noisy = np.clip(x_train_noisy, 0., 1.)
x_test_noisy = np.clip(x_test_noisy, 0., 1.)
x_train_noisy = x_train_noisy.astype(np.float)
x_test_noisy = x_test_noisy.astype(np.float)



可以達到同樣的效果,只是將圖片逐個讀到內存需要多花一些時間

 

 

第二種方法:

import glob
from PIL import Image

Datapath = "MNIST_data/mnist_train/*.png"
x_train = np.zeros(x_train.shape)
i = 0
for imageFile in glob.glob(Datapath ):
    # 打開圖像並轉化為數字矩陣
    img = np.array(Image.open(imageFile))
    img = np.reshape(img, (1, 28, 28, 1))
    img = img.astype('float32') / 255.
    x_train[i] = img
    i += 1

要求圖片都在mnist_train目錄下,同樣可以達到目的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM