我正在努力训练这种张量流图像识别。我正在为它提供两个单独的文件夹,其中包含完整的图像,但它不起作用,我认为它是一个数组错误。我之前已经运行了一个充满图像的文件夹,当我切换到两个文件夹并设计了我开始得到错误的架构时,它运行良好。我觉得它可能是这样的事实,他们我加倍标签,但我不确定。寻找所有建议,但记住我对神经网络/深度学习和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
对不起这个糟糕的蟒蛇我很难接受这种语言。感谢您的帮助!
答案 0 :(得分:1)
您的问题中出现错误,因为training_data
是numpy数组的列表,而numpy.save()
只能保存numpy数组。我建议您在保存之前堆叠这些数组numpy.stack()
,但另一个问题是即使training_data
的元素都是列表。
通常的方法是使用一个numpy数组来保存训练数据,另一个用于标记。 (请注意,numpy也可以随numpy.random.shuffle
进行随机播放,但要小心保持图像和标签同步。)然后单独保存,或与numpy.savez
一起保存。
一个简单的解决方法是使用Python Pickle来保存(以后加载)数据,这些数据可以处理各种对象,而不仅仅是数组,但速度要慢得多,根据您的数据大小,这可能是也可能不是您的一个因素。
单独注释:定义label_img
函数两次将导致第二个函数运行。很像
a = 5
a = 256
将导致a
的值为256。