在keras模型中安装一个简单的图像生成器

在keras模型中安装一个简单的图像生成器,keras,generator,Keras,Generator,我有一个keras模型,它接受一个输入图像和一个标签值 我有一个数据发生器,可以读取图像,对其进行处理并将其输入网络 从PIL导入图像 def my_迭代器(): i=0 尽管如此: img_name=列车方向位置[i,'Image'] img\U标签=列车方向位置[i,'Id'] img=Image.open('master_train/'+str(img_name)).convert('L')) 打印(图像模式) 长边=最大(最小尺寸) 水平填充=(长边-img.size[0])/2 垂直填

我有一个keras模型,它接受一个输入图像和一个标签值

我有一个数据发生器,可以读取图像,对其进行处理并将其输入网络

从PIL导入图像
def my_迭代器():
i=0
尽管如此:
img_name=列车方向位置[i,'Image']
img\U标签=列车方向位置[i,'Id']
img=Image.open('master_train/'+str(img_name)).convert('L'))
打印(图像模式)
长边=最大(最小尺寸)
水平填充=(长边-img.size[0])/2
垂直填充=(长边-img.size[1])/2
img=img.裁剪((-水平填充,-垂直填充,img.尺寸[0]+水平填充,img.尺寸[1]+垂直填充))
图像缩略图((128128),图像反别名)
img_array=np.asarray(img,dtype='uint8')
img_数组=img_数组[:,:,np.newaxis]
打印(img_array.ndim)
产生img_数组、img_标签
i=(i+1)%len(列车方向)
从keras.models导入模型
从keras.layers导入输入,密集
输入层=输入(形状=(128128,1))
x=密集(100,激活='relu')(输入层)
输出_层=密集(1,激活='sigmoid')(x)
模型=模型(输入=输入层,输出=输出层)
编译(loss='binary\u crossentropy',optimizer='nadam',metrics['accurity'])
model.summary()
training_generator=my_迭代器()
模型拟合(训练生成器,每个历元的步数=1)
我得到以下错误

AttributeError回溯(最近一次调用)
在()
---->1个模型。配合(列车发电机,每历元步数=1)
~/work/venvs/keras3/lib/python3.6/site-packages/keras/engine/training.py in-fit(self、x、y、批量大小、历元、冗余、回调、验证分割、验证数据、无序排列、类权重、样本权重、初始历元、每历元的步骤、验证步骤、**kwargs)
1628样品重量=样品重量,
1629类重量=类重量,
->1630批次大小=批次大小)
1631#准备验证数据。
1632 do_验证=错误
~/work/venvs/keras3/lib/python3.6/site-packages/keras/engine/training.py in\u-standard\u-user\u数据(自身、x、y、样本重量、类别重量、检查数组长度、批次大小)
1474自输入形状,
1475检查批次轴=假,
->1476异常(前缀为“输入”)
1477 y=\u标准化\u输入\u数据(y,自.\u输入\u输出\u名称,
1478个输出_形,
~/work/venvs/keras3/lib/python3.6/site-packages/keras/engine/training.py输入数据(数据、名称、形状、检查批处理轴、异常前缀)
74 data=data.values if data.\u_class\u_.\u_name\u_=='DataFrame'else data
75数据=[数据]
--->76 data=[np.expand_dims(x,1),如果x不是None,则x.ndim==1,否则x代表数据中的x]
77
78如果len(数据)!=len(名称):
~/work/venvs/keras3/lib/python3.6/site-packages/keras/engine/training.py in(.0)
74 data=data.values if data.\u_class\u_.\u_name\u_=='DataFrame'else data
75数据=[数据]
--->76 data=[np.expand_dims(x,1),如果x不是None,则x.ndim==1,否则x代表数据中的x]
77
78如果len(数据)!=len(名称):
AttributeError:“生成器”对象没有属性“ndim”
​

您应该使用
fit\u generator
来训练使用生成器的模型,而不是普通的
fit
功能。

谢谢!这很有帮助。但是我认为问题仍然没有解决。我将图像重塑为“img\u数组”。重塑(1128128,1)'因为我现在使用的批处理大小为1,然后再将其传递给我的网络。我的神经网络预期为'input_layer=input(shape=(128128,1)),因为它是黑白图像。我得到错误str没有属性ndim这是与fit_生成器有关的