ImageDataGenerator的参数自己看文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
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' ) ''' 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) |
输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[[ 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
再一一番百度后无结果,上谷歌后找到了类似的问题。但是是一对鸟文不知道什么东西(翻译后发现是俄文)。后来谷歌翻译了一下找到了解决方法。故将原始问题文章贴上来警示一下
原训练代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
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 ( "Сохранение завершено!" ) |
模型载入
1
2
3
4
5
6
7
8
9
|
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 ( "Загрузка завершена!" ) |
报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/ 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 = 'layer' ) 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不能一起工作;只需更改导入字符串即可。)
强调文本 强调文本
1
2
3
4
|
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
以上这篇keras的ImageDataGenerator和flow()的用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/CZ505632696/article/details/79515782