2016-12-04 1 views
0

Ich erhalte diesen Fehler, als ich versuchte, ein benutzerdefiniertes Graustufenbild-Dataset (mit nur 2 Bildern) mit dem Beispiel-Mnist-Code von tflearn zu trainieren. Die Bilder sind alle von unterschiedlicher Größe, im Bereich von (3000,3000) Höhe und Breite. Das ist mein Fehler:'int' Objekt hat kein Attribut __get__item Fehler beim Training Modell mit tflearn?

Run id: convnet_images 
Log directory: /tmp/tflearn_logs/ 
Exception in thread Thread-14: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 754, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/tflearn/data_flow.py", line 186, in fill_feed_dict_queue 
    data = self.retrieve_data(batch_ids) 
    File "/usr/local/lib/python2.7/dist-packages/tflearn/data_flow.py", line 221, in retrieve_data 
    utils.slice_array(self.feed_dict[key], batch_ids) 
    File "/usr/local/lib/python2.7/dist-packages/tflearn/utils.py", line 187, in slice_array 
    return X[start] 
TypeError: 'int' object has no attribute '__getitem__' 

und dies ist mein Code:

import tensorflow as tf 
import tflearn 
from scipy.misc import imread 
import numpy as np 
np.set_printoptions(threshold=np.nan) 

image = imread('image.jpg') 
image2 = imread('image2.jpg') 

image3 = imread('image3.jpg') 
image4 = imread('image4.jpg') 

image = np.resize(image, (256, 256, 1)) 
image2 = np.resize(image2, (256, 256, 1)) 
image3 = np.resize(image3, (256, 256, 1)) 
image4 = np.resize(image4, (256, 256,1)) 

image_train = np.stack((image, image2), axis = 0) 
image_test = np.stack((image3, image4), axis = 0) 
# # build the neural net 
from tflearn.layers.core import input_data, dropout, fully_connected 
from tflearn.layers.conv import conv_2d, max_pool_2d 
from tflearn.layers.normalization import local_response_normalization 
from tflearn.layers.estimator import regression 

network = input_data(shape = [None, 256, 256, 1], name = 'input') 
network = conv_2d(network, 32, 3, activation = 'relu', regularizer = 'L2') 
network = max_pool_2d(network, 2) 
network = local_response_normalization(network) 
# network = conv_2d(network, 64, 3, activation = 'relu', regularizer = 'L2') 
# network = max_pool_2d(network, 2) 
# network = local_response_normalization(network) 
network = fully_connected(network, 128, activation = 'tanh') 
network = dropout(network, 0.8) 
network = fully_connected(network, 1, activation = 'softmax') 
network = regression(network, optimizer = 'adam', learning_rate = '0.001', name = 'target') 

#Training 
model = tflearn.DNN(network, tensorboard_verbose = 3) 
model.fit({'input': image_train}, {'target': 0}, n_epoch = 20, batch_size = 1, 
      validation_set = ({'input': image_test}, {'target': 0}), 
      snapshot_step = 100, show_metric = True, run_id = 'convnet_images') 

Ich vermute stark der Fehler kommt von der Tatsache, dass mein Graustufen- Pixelintensitätswert ein np.uint8 und keine np Array . Das heißt, wenn ich print type(image_train[0, 0, 0, 0]) gebe, die den Pixelwert gibt, ist es ein np.uint8, was wahrscheinlich bedeutet, dass der Code in tflearn nicht auf den Wert zugreifen kann, indem er einen Indexselektor verwendet __getitem__ (von dem, was ich bisher gelesen habe). Aber wie kann ich den Pixelwert zu einem np-Array machen? Ist np.resize der richtige Umgang mit Graustufenbildern? Im Idealfall sollte dies für farbige Bilder funktionieren, was bedeutet, dass die 4. Dimension - die Kanalpixelwerte von RGB - ein np-Array sein muss, das die 3 Pixelwerte enthält (und so verständlicherweise den tflearn-Code angefordert hat, um auf die Pixelwerte zuzugreifen) . __getitem__ Aber das ist meine Vermutung nur, ich bin immer noch nicht sicher, wie um dies zu realisieren

+0

können Sie Ihre Graustufenbild als ein RGB-Bild behandeln mit. Jeder Kanal hat einen gleichen Wert? – theorifice

+0

Hmm Ich wollte, aber würde das nicht eine 2x Erhöhung der Datengröße zur Folge haben? Ich denke, es wird schwer zu skalieren, wenn ich viele Bilder verarbeiten muss. Gibt es eine permanente Lösung t o Größe der Bildgröße richtig einstellen? – kwotsin

+0

Ich habe einen Fehler in meinem Code entdeckt, das heißt, dass mein Y-Wert nicht als 2 mal 1 NP-Array formatiert ist und stattdessen nur ein Float ist. Nach dem Beheben dieses Fehlers ist der Indexfehler jetzt weg, aber ich bin jetzt zu einem anderen Problem gekommen, das hier zu finden ist: http://stackoverflow.com/questions/40955168/tensorflow-cast-string-to-float-is- not-supported-error-when-using-tflearn-despi Vielen Dank für Ihre Hilfe. – kwotsin

Antwort

0

OP selbst beantwortet in einem Kommentar:

I have discovered an error in my code, that is my Y value isn't formatted as a 2 by 1 np array and is instead just a float. Upon fixing this error, the index error is now gone.

Verwandte Themen