TFLearn TypeError Only Size 1 Массивы могут быть преобразованы в Python скаляры и ValueError Установка массива с последовательностью происходит одновременно - PullRequest
0 голосов
/ 03 августа 2020

При попытке создать нейронную сеть, которая будет классифицировать изображения мужчин и женщин, в моей трассировке произошли две ошибки. Одним из них был TypeError: только массивы размера 1 можно преобразовать в Python скаляры, а другим - ValueError: установка элемента массива с последовательностью. Кто-нибудь может помочь? Я пробовал другие предложения сообщений stackoverflow, но, попробовав их все, они по-прежнему вызывают у меня ту же проблему. Вот мой код ниже:

import tflearn
import tensorflow
import matplotlib.pyplot as plt
import os
import cv2
import time
import numpy
from PIL import *

#inputs
MALE = "C:\\Users\\Robin\\Desktop\\jasonBot\\male"
FEMALE = "C:\\Users\\Robin\\Desktop\\jasonBot\\female"
TRAIN_X = []
TRAIN_Y = []

#outputs
LABELS = {MALE:0, FEMALE:1}

for male in os.listdir(MALE):
    path = os.path.join(MALE, male)
    gray_img = Image.open(path).convert("LA").resize((50,50))
    processed_male_image = numpy.array(gray_img)
    TRAIN_X.append([numpy.array(processed_male_image),numpy.eye(2)[LABELS[MALE]]])
    

for female in os.listdir(FEMALE):
    path = os.path.join(FEMALE, female)
    gray_img = Image.open(path).convert("LA").resize((50,50))
    processed_female_image = numpy.array(gray_img)
    TRAIN_X.append([numpy.array(processed_female_image), numpy.eye(2)[LABELS[FEMALE]]])
print("The training data list is ",len(TRAIN_X),"long")
print(TRAIN_X[0])
print(numpy.array(TRAIN_X[0]).shape)

numpy.random.shuffle(TRAIN_X)

for label in TRAIN_X:
    label_num = 0
    TRAIN_Y.append(TRAIN_X[label_num])
    label_num += 1
    print("item added")

tensorflow.reset_default_graph()

size = len(TRAIN_X[0])

net = tflearn.input_data(shape=[None, size])
net = tflearn.fully_connected(net, 20)
net = tflearn.fully_connected(net, 20)
net = tflearn.fully_connected(net, 20)
net = tflearn.fully_connected(net, 20)
net = tflearn.fully_connected(net, len(TRAIN_Y[0]), activation="softmax")
net = tflearn.regression(net)

model = tflearn.DNN(net)


print(TRAIN_X[0])
print(numpy.array(TRAIN_X[0]).shape)


model.fit(TRAIN_X, TRAIN_Y, n_epoch=2000, batch_size = 20, show_metric=True)

и вот ошибка

TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "main.py", line 65, in <module>
    model.fit(TRAIN_X, TRAIN_Y, n_epoch=2000, batch_size = 20, show_metric=True)
  File "C:\Users\Robin\anaconda3\envs\env_pytorch\lib\site-packages\tflearn\models\dnn.py", line 216, in fit
    callbacks=callbacks)
  File "C:\Users\Robin\anaconda3\envs\env_pytorch\lib\site-packages\tflearn\helpers\trainer.py", line 339, in fit
    show_metric)
  File "C:\Users\Robin\anaconda3\envs\env_pytorch\lib\site-packages\tflearn\helpers\trainer.py", line 818, in _train
    feed_batch)
  File "C:\Users\Robin\anaconda3\envs\env_pytorch\lib\site-packages\tensorflow_core\python\client\session.py", line 956, in run
    run_metadata_ptr)
  File "C:\Users\Robin\anaconda3\envs\env_pytorch\lib\site-packages\tensorflow_core\python\client\session.py", line 1149, in _run
    np_val = np.asarray(subfeed_val, dtype=subfeed_dtype)
  File "C:\Users\Robin\anaconda3\envs\env_pytorch\lib\site-packages\numpy\core\_asarray.py", line 85, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: setting an array element with a sequence.
...