我尝试使用ImageDataGenerator
和flow()
用Keras设置二进制cnn。我看过其他具有类似问题的线程,但仍然无法使模型运行。
我的图片存储在正确的树形结构中,我认为它们均未损坏或损坏
我正在使用Keras 2.2.5和TensorFlow 1.15.0。
当我尝试训练模型时,出现以下错误:
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1033: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1020: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3005: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.
Epoch 1/10
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:190: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:197: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:207: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:216: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:223: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-37-62d341ff3a92> in <module>()
----> 1 get_ipython().run_cell_magic('time','','\nhistory = model.fit_generator(\n train_generator,\n steps_per_epoch=len(X_train) / BATCH_SIZE,\n epochs=EPOCHS,\n validation_data=val_generator,\n validation_steps=len(X_val) / BATCH_SIZE\n)')
9 frames
/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py in run_cell_magic(self,magic_name,line,cell)
2115 magic_arg_s = self.var_expand(line,stack_depth)
2116 with self.builtin_trap:
-> 2117 result = fn(magic_arg_s,cell)
2118 return result
2119
</usr/local/lib/python3.6/dist-packages/decorator.py:decorator-gen-60> in time(self,cell,local_ns)
/usr/local/lib/python3.6/dist-packages/IPython/core/magic.py in <lambda>(f,*a,**k)
186 # but it's overkill for just that one bit of state.
187 def magic_deco(arg):
--> 188 call = lambda f,**k: f(*a,**k)
189
190 if callable(arg):
/usr/local/lib/python3.6/dist-packages/IPython/core/magics/execution.py in time(self,local_ns)
1191 else:
1192 st = clock2()
-> 1193 exec(code,glob,local_ns)
1194 end = clock2()
1195 out = None
<timed exec> in <module>()
/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args,**kwargs)
89 warnings.warn('Update your `' + object_name + '` call to the ' +
90 'Keras 2 API: ' + signature,stacklevel=2)
---> 91 return func(*args,**kwargs)
92 wrapper._original_function = func
93 return wrapper
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in fit_generator(self,generator,steps_per_epoch,epochs,verbose,callbacks,validation_data,validation_steps,validation_freq,class_weight,max_queue_size,workers,use_multiprocessing,shuffle,initial_epoch)
1656 use_multiprocessing=use_multiprocessing,1657 shuffle=shuffle,-> 1658 initial_epoch=initial_epoch)
1659
1660 @interfaces.legacy_generator_methods_support
/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py in fit_generator(model,initial_epoch)
213 outs = model.train_on_batch(x,y,214 sample_weight=sample_weight,--> 215 class_weight=class_weight)
216
217 outs = to_list(outs)
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in train_on_batch(self,x,sample_weight,class_weight)
1447 ins = x + y + sample_weights
1448 self._make_train_function()
-> 1449 outputs = self.train_function(ins)
1450 return unpack_singleton(outputs)
1451
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py in __call__(self,inputs)
2977 return self._legacy_call(inputs)
2978
-> 2979 return self._call(inputs)
2980 else:
2981 if py_any(is_tensor(x) for x in inputs):
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py in _call(self,inputs)
2915 array_vals.append(
2916 np.asarray(value,-> 2917 dtype=tf.as_dtype(tensor.dtype).as_numpy_dtype))
2918 if self.feed_dict:
2919 for key in sorted(self.feed_dict.keys()):
/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a,dtype,order)
83
84 """
---> 85 return array(a,copy=False,order=order)
86
87
TypeError: float() argument must be a string or a number,not 'NoneType'
这是我的Keras代码:
#Establish model parameters
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),input_shape=(IMG_SIZE,IMG_SIZE,3)))
model.add(layers.activation('relu'))
model.add(layers.MaxPooling2D(pool_size=(2,2)))
model.add(layers.Conv2D(32,2)))
model.add(layers.Conv2D(64,2)))
model.add(layers.Reshape((-1,))) #replaced flatten()
model.add(layers.Dense(64))
model.add(layers.activation('relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1))
model.add(layers.activation('sigmoid'))
#Compile model
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
model.summary()
#Image generator
data_aug = ImageDataGenerator(
rescale=1. / 255,shear_range=0.2,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=15,# randomly rotate images in the range (degrees,0 to 180)
zoom_range =0.15,# 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=True,# randomly flip images
vertical_flip=False) # randomly flip images
#Prepare image generator for training dataset
train_generator = data_aug.flow(np.array(X_train),y_train,batch_size=BATCH_SIZE)
#Prepare validation generator
val_datagen = ImageDataGenerator(
rescale=1. / 255)
val_generator = val_datagen.flow(np.array(X_val),y_val,batch_size=BATCH_SIZE)
#Fit model 1
%%time
history = model.fit_generator(
train_generator,steps_per_epoch=len(X_train) / BATCH_SIZE,epochs=EPOCHS,validation_data=val_generator,validation_steps=len(X_val) / BATCH_SIZE
)
有人看到Keras代码有什么问题吗?还是图像预处理步骤有问题?