简体   繁体   中英

tflearn: ValueError in model.fit

I am new to TFLearn and I am trying to write a simple CNN. Here is my code:

import tensorflow as tf
import tflearn
from tflearn.layers.core import input_data, fully_connected, dropout
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.data_utils import image_dirs_to_samples, to_categorical
from tflearn.layers.estimator import regression


if __name__ == '__main__':

  NUM_CATEGORIES = 5

  X, Y = image_dirs_to_samples('./flower_photos_100')
  Y = to_categorical(Y, NUM_CATEGORIES)

  net = input_data(shape=[None, 299, 299, 3])

  net = conv_2d(net, 32, 3, activation='relu', name='conv_0')
  net = max_pool_2d(net, 2, name='max_pool_0')
  net = dropout(net, 0.75, name='dropout_0')

  for i in range(4):
      net = conv_2d(net, 64, 3, activation='relu', name='conv_{}'.format(i))
      net = max_pool_2d(net, 2, name='max_pool_{}'.format(i))
      net = dropout(net, 0.5, name='dropout_{}'.format(i))

  net = fully_connected(net, 512, activation='relu')
  net = dropout(net, 0.5, name='dropout_fc')
  softmax = fully_connected(net, NUM_CATEGORIES, activation='softmax')

  rgrs = regression(softmax, optimizer='adam',
                          loss='categorical_crossentropy',
                          learning_rate=0.001)

  model = tflearn.DNN(rgrs,
                      checkpoint_path='rs_ckpt',
                      max_checkpoints=3)

  model.fit(X, Y,
            n_epoch=10,
            validation_set=0.1,
            shuffle=True,
            snapshot_step=100,
            show_metric=True,
            batch_size=64,
            run_id='rs')

I am getting the following error:

Traceback (most recent call last):
  File "rs.py", line 46, in <module>
    run_id='rs')
  File "/usr/local/lib/python2.7/site-packages/tflearn/models/dnn.py", line 188, in fit
    run_id=run_id)
  File "/usr/local/lib/python2.7/site-packages/tflearn/helpers/trainer.py", line 277, in fit
    show_metric)
  File "/usr/local/lib/python2.7/site-packages/tflearn/helpers/trainer.py", line 684, in _train
    feed_batch)
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 717, in run
    run_metadata_ptr)
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 888, in _run
    np_val = np.asarray(subfeed_val, dtype=subfeed_dtype)
  File "/usr/local/lib/python2.7/site-packages/numpy/core/numeric.py", line 482, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: setting an array element with a sequence.

I have a hunch it has something to do with the shape of X , but I cannot figure out how can I fix it (also, I would expect that image_dirs_to_samples would return something that makes sense to tflearn).

Apparently my assumptions about the images were not true: they are not necessarily 299x299, and when I passed resize=[299, 299] to image_dirs_to_samples it started working. However, I still don't understand why I was getting a ValueError.

It means it cannot turn X into a numpy array. The meaning of it, is that not all the elements in the list X are of the same shape. Make sure the function that loads images to samples does really normalizes the size of the image, and if not, make sure all the images are the same size.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM