你怎么把多个数组变成十个

2024-10-03 11:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在训练张量流图像识别。我喂它两个独立的文件夹充满图像,但它不会工作,我认为这是一个数组错误。我以前用一个文件夹运行过它,里面装满了图像,当我切换到两个文件夹并设计了一个架构,开始出现错误时,它运行得很好。我有一种感觉,可能是因为他们把我的标签翻了一倍,但我不确定。寻找所有的建议,但请记住,我对神经网络/深度学习和python都非常陌生,但非常感谢您的帮助

import cv2
import numpy as np
import os
from random import shuffle
from tqdm import tqdm

CCW_DIR = 'C:\\Users\\cward\\Desktop\\images\\gz2\\ccw'
CW_DIR = 'C:\\Users\\cward\\Desktop\\images\\gz2\\cw'
IMG_SIZE = 50
LR = 1e-3

MODEL_NAME = 'dogsvscats-{}-{}.model'.format(LR, '2conv-basic')

def label_img(imgCW):
    #word_label = img.split('.')[-3]
    return[1,0]
    #word_label == 'cw': return[0,1]
def label_img(imgCCW):
    return[0,1]

def create_train_data():
    training_data = []
    for imgCCW in tqdm(os.listdir(CCW_DIR)):
        labelCCW = label_img(imgCCW)
        path = os.path.join(CCW_DIR, imgCCW)
        img = cv2.resize(cv2.imread(path, cv2.IMREAD_GRAYSCALE), (IMG_SIZE,IMG_SIZE))
        training_data.append([np.array(imgCCW), np.array(labelCCW)])
    for imgCW in tqdm(os.listdir(CW_DIR)):
        labelCW = label_img(imgCW)
        path = os.path.join(CW_DIR, imgCW)
        img = cv2.resize(cv2.imread(path, cv2.IMREAD_GRAYSCALE), (IMG_SIZE,IMG_SIZE))
        training_data.append([np.array(imgCW), np.array(labelCW)])
    shuffle(training_data)
    np.save('train_data.npy', training_data)
    return training_data

train_data = create_train_data()

这是程序运行两个图像文件夹后出现的错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-44-40719067ea74> in <module>()
----> 1 train_data = create_train_data()

<ipython-input-42-fa8590694b2d> in create_train_data()
     12         training_data.append([np.array(imgCW), np.array(labelCW)])
     13     shuffle(training_data)
---> 14     np.save('train_data.npy', training_data)
     15     return training_data

~\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\lib\npyio.py in save(file, arr, allow_pickle, fix_imports)
    507 
    508     try:
--> 509         arr = np.asanyarray(arr)
    510         format.write_array(fid, arr, allow_pickle=allow_pickle,
    511                            pickle_kwargs=pickle_kwargs)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\core\numeric.py in asanyarray(a, dtype, order)
    542 
    543     """
--> 544     return array(a, dtype, copy=False, order=order, subok=True)
    545 
    546 

ValueError: setting an array element with a sequence

抱歉,python不好,我对这门语言很陌生。提前谢谢你的帮助


Tags: pathinimportimgdatareturnosdir
1条回答
网友
1楼 · 发布于 2024-10-03 11:26:17

问题中出现错误是因为training_data是numpy数组的列表,^{}只能保存numpy数组。我建议您在保存之前用^{}堆栈那些数组,但更进一步的问题是,即使training_data的元素也是列表

通常的方法是使用一个numpy数组来保存训练数据,另一个用于标签(注意,numpy也可以与^{}混洗,但要注意保持图像和标签同步。)然后分别保存它们,或者与^{}一起保存

一个简单的解决方法是使用Python的Pickle来保存(稍后加载)数据,它可以处理所有类型的对象,不仅仅是数组,但是速度要慢得多,根据数据的大小,这可能是一个因素,也可能不是一个因素

一个单独的注释:两次定义label_img函数将导致第二个函数运行。很像

a = 5
a = 256

将导致a的值为256

相关问题 更多 >