歡迎您光臨本站 註冊首頁

keras的ImageDataGenerator和flow()的用法說明

←手機掃碼閱讀     zmcjlove @ 2020-07-06 , reply:0

ImageDataGenerator的參數自己看文檔

  from keras.preprocessing import image  import numpy as np    X_train=np.ones((3,123,123,1))  Y_train=np.array([[1],[2],[2]])  generator=image.ImageDataGenerator(featurewise_center=False,    samplewise_center=False,    featurewise_std_normalization=False,    samplewise_std_normalization=False,    zca_whitening=False,    zca_epsilon=1e-6,    rotation_range=180,    width_shift_range=0.2,    height_shift_range=0.2,    shear_range=0,    zoom_range=0.001,    channel_shift_range=0,    fill_mode='nearest',    cval=0.,    horizontal_flip=True,    vertical_flip=True,    rescale=None,    preprocessing_function=None,    data_format='channels_last')    a=generator.flow(X_train,Y_train,batch_size=20)#生成的是一個迭代器,可直接用於for循環  '''  batch_size如果小於X的第一維m,next生成的多維矩陣的第一維是為batch_size,輸出是從輸入中隨機選取batch_size個數據  batch_size如果大於X的第一維m,next生成的多維矩陣的第一維是m,輸出是m個數據,不過順序隨機  ,輸出的X,Y是一一對對應的  如果要直接用於tf.placeholder(),要求生成的矩陣和要與tf.placeholder相匹配    '''  X,Y=next(a)    print(Y)  X,Y=next(a)    print(Y)  X,Y=next(a)    print(Y)  X,Y=next(a)

 

輸出

  [[2]   [1]   [2]]    [[2]   [2]   [1]]    [[2]   [2]   [1]]    [[2]   [2]   [1]]

 

補充知識:tensorflow 與keras 混用之坑

在使用tensorflow與keras混用是model.save 是正常的但是在load_model的時候報錯了在這裡mark 一下

其中錯誤為:TypeError: tuple indices must be integers, not list

再一一番百度後無結果,上谷歌後找到了類似的問題。但是是一對鳥文不知道什麼東西(翻譯後發現是俄文)。後來谷歌翻譯了一下找到了解決方法。故將原始問題文章貼上來警示一下

原訓練代碼

  from tensorflow.python.keras.preprocessing.image import ImageDataGenerator  from tensorflow.python.keras.models import Sequential  from tensorflow.python.keras.layers import Conv2D, MaxPooling2D, BatchNormalization  from tensorflow.python.keras.layers import Activation, Dropout, Flatten, Dense     #Каталог с данными для обучения  train_dir = 'train'  # Каталог с данными для проверки  val_dir = 'val'  # Каталог с данными для тестирования  test_dir = 'val'     # Размеры изображения  img_width, img_height = 800, 800  # Размерность тензора на основе изображения для входных данных в нейронную сеть  # backend Tensorflow, channels_last  input_shape = (img_width, img_height, 3)  # Количество эпох  epochs = 1  # Размер мини-выборки  batch_size = 4  # Количество изображений для обучения  nb_train_samples = 300  # Количество изображений для проверки  nb_validation_samples = 25  # Количество изображений для тестирования  nb_test_samples = 25     model = Sequential()     model.add(Conv2D(32, (7, 7), padding="same", input_shape=input_shape))  model.add(BatchNormalization())  model.add(Activation('tanh'))  model.add(MaxPooling2D(pool_size=(10, 10)))     model.add(Conv2D(64, (5, 5), padding="same"))  model.add(BatchNormalization())  model.add(Activation('tanh'))  model.add(MaxPooling2D(pool_size=(10, 10)))     model.add(Flatten())  model.add(Dense(512))  model.add(Activation('relu'))  model.add(Dropout(0.5))  model.add(Dense(10, activation='softmax'))     model.compile(loss='categorical_crossentropy',         optimizer="Nadam",         metrics=['accuracy'])  print(model.summary())  datagen = ImageDataGenerator(rescale=1. / 255)     train_generator = datagen.flow_from_directory(    train_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical')     val_generator = datagen.flow_from_directory(    val_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical')     test_generator = datagen.flow_from_directory(    test_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical')     model.fit_generator(    train_generator,    steps_per_epoch=nb_train_samples // batch_size,    epochs=epochs,    validation_data=val_generator,    validation_steps=nb_validation_samples // batch_size)     print('Сохраняем сеть')  model.save("grib.h5")  print("Сохранение завершено!")

 

模型載入

  from tensorflow.python.keras.preprocessing.image import ImageDataGenerator  from tensorflow.python.keras.models import Sequential  from tensorflow.python.keras.layers import Conv2D, MaxPooling2D, BatchNormalization  from tensorflow.python.keras.layers import Activation, Dropout, Flatten, Dense  from keras.models import load_model     print("Загрузка сети")  model = load_model("grib.h5")  print("Загрузка завершена!")

 

報錯

  /usr/bin/python3.5 /home/disk2/py/neroset/do.py  /home/mama/.local/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.   from ._conv import register_converters as _register_converters  Using TensorFlow backend.  Загрузка сети  Traceback (most recent call last):   File "/home/disk2/py/neroset/do.py", line 13, in <module>    model = load_model("grib.h5")   File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 243, in load_model    model = model_from_config(model_config, custom_objects=custom_objects)   File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 317, in model_from_config    return layer_module.deserialize(config, custom_objects=custom_objects)   File "/usr/local/lib/python3.5/dist-packages/keras/layers/__init__.py", line 55, in deserialize    printable_module_name=&#x27;layer&#x27;)   File "/usr/local/lib/python3.5/dist-packages/keras/utils/generic_utils.py", line 144, in deserialize_keras_object    list(custom_objects.items())))   File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 1350, in from_config    model.add(layer)   File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 492, in add    output_tensor = layer(self.outputs[0])   File "/usr/local/lib/python3.5/dist-packages/keras/engine/topology.py", line 590, in __call__    self.build(input_shapes[0])   File "/usr/local/lib/python3.5/dist-packages/keras/layers/normalization.py", line 92, in build    dim = input_shape[self.axis]  TypeError: tuple indices must be integers or slices, not list     Process finished with exit code 1

 

戰鬥種族解釋

убераю BatchNormalization всё работает хорошо. Не подскажите в чём ошибка?Выяснил что сохранение keras и нормализация tensorflow не работают вместе нужно просто изменить строку импорта.(譯文:整理BatchNormalization一切正常。 不要告訴我錯誤是什麼?我發現保存keras和規範化tensorflow不能一起工作;只需更改導入字符串即可。)

強調文本 強調文本

  keras.preprocessing.image import ImageDataGenerator  keras.models import Sequential  keras.layers import Conv2D, MaxPooling2D, BatchNormalization  keras.layers import Activation, Dropout, Flatten, Dense

 

##完美解決

##附上原文鏈接

https://qa-help.ru/questions/keras-batchnormalization


   


[zmcjlove ] keras的ImageDataGenerator和flow()的用法說明已經有324次圍觀

http://coctec.com/docs/python/shhow-post-241458.html