Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将对象转换为数组,以便向keras中的cnn模型输入可变大小的图像_Python_Tensorflow_Keras - Fatal编程技术网

Python 如何将对象转换为数组,以便向keras中的cnn模型输入可变大小的图像

Python 如何将对象转换为数组,以便向keras中的cnn模型输入可变大小的图像,python,tensorflow,keras,Python,Tensorflow,Keras,我有271张不同大小的图片,我想让它们成为我的cnn模型。首先让我们看看当我将它们全部调整为50*50时,我使用以下代码将它们提供给我的cnn模型: data_path = "/home/nd/data1/" data_dir_list = os.listdir(data_path) img_data_list=[] for dataset in data_dir_list: img_list=os.listdir(data_path+'/'+ dataset)

我有271张不同大小的图片,我想让它们成为我的cnn模型。首先让我们看看当我将它们全部调整为50*50时,我使用以下代码将它们提供给我的cnn模型:

data_path = "/home/nd/data1/"
data_dir_list = os.listdir(data_path)
img_data_list=[]

    for dataset in data_dir_list:
        img_list=os.listdir(data_path+'/'+ dataset)
        print ('Loaded the images of dataset-'+'{}\n'.format(dataset))
        for img in img_list:
            input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img,0)
            img_data_list.append(input_img)

    img_data = np.array(img_data_list)
    img_data = img_data.astype('float32')
    img_data /= 255
    if num_channel==1:
        if K.image_dim_ordering()=='th':
            img_data= np.expand_dims(img_data, axis=1) 
        else:
            img_data= np.expand_dims(img_data, axis=4) 
    else:
        if K.image_dim_ordering()=='th':
            img_data=np.rollaxis(img_data,3,1)

这使得
img_数据=(271,50,50,1)为float32类型
,然后最后我使用
model.fit(img_数据,y)
。但是当我输入不同大小的图像(数字271相同)时,上面的代码(我已经注释了
img_data=img_data.astype('float32')
,因为否则它会给出
ValueError:用序列设置数组元素。
)使img_数据成为
对象=(271,)
(numpy模块的第二个数组对象)然后使用
模式。fit
给我错误
值错误:检查输入时出错:预期conv2d_10_输入有4维,但得到了形状为(271,1)的数组
(这里我不提供完整代码的其他详细信息,因为数据馈送中存在问题)

img_数据列表包含不同大小的图像,这使得它不可能变成
np数组
。这就是第一个错误的来源。不可能批量向卷积网络的输入提供不同形状的图像

你能推荐任何其他支持可变大小图像输入的深度学习库吗?如果你一个接一个地输入图像(批量大小为1),这应该是可能的。在这种情况下,您必须确保实际架构不受图像大小变化的影响,这将需要对网络进行修改。在典型的卷积结构中,卷积后输出特征的数量取决于图像输入大小。所以这不仅仅是选择另一个图书馆的问题好的,我明白你的意思了。我的架构是处理卷积过程后大小变化的电缆(我使用GlobalAvgPooling)。请您帮忙在代码,如何饲料图像一个接一个,我改变了批量大小=1。但是如何一个接一个地输入图像我不知道您可以将当前的for循环(
for img in img_list
)转换为一个生成器,一次生成一个图像。然后用
fit\u generator()
而不是
fit()
来训练网络。通过这种方式,您可以直接将图像一个接一个地馈送到网络,而不是首先在
np数组中收集图像(这是不可能的,因为大小不同)。有关如何使用生成器训练CNN的一些样板代码,您可以查看.Thnx。我会尽力让你知道的