ValueError: невозможно передать значение формы (64, 32, 32) для тензора u'InputData/X:0', который имеет форму "(?, 32, 32, 1)"

Я пытаюсь обучить модель, используя tflearn и свои собственные данные.

У меня есть 19748 изображений в оттенках серого, которые я хочу обучить, используя свою модель. Я использовал метод Image_Preloader tflearn для ввода изображения. И все изображения конвертируются в размер 32*32. Но когда я начинаю процесс обучения, я получаю эту ошибку «ValueError: невозможно передать значение формы (64, 32, 32) для тензора u'InputData/X: 0», который имеет форму «(?, 32, 32, 1) '"

Я перепробовал все, что мне было известно, но не смог решить эту проблему, и в stackoverflow были похожие типы вопросов, но они не сработали для меня.

Вот мой код.

from __future__ import division, print_function, absolute_import


import tflearn
import pickle
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
from time import gmtime, strftime
from tflearn.data_utils import image_preloader
import numpy as np


dataset_file = 'noww.txt'



X = np.zeros((19748,32,32,1))
Y = np.zeros((19748,10))

X, Y = image_preloader(dataset_file, image_shape=(32, 32),   mode='file', categorical_labels=True,   normalize=True)


network = input_data(shape=[None, 32, 32, 1])


network = conv_2d(network, 64, 3, activation='relu')
network = conv_2d(network, 64, 3, activation='relu')
network = max_pool_2d(network, 2, strides=2)

network = conv_2d(network, 128, 3, activation='relu')
network = conv_2d(network, 128, 3, activation='relu')
network = max_pool_2d(network, 2, strides=2)

network = conv_2d(network, 256, 3, activation='relu')
network = conv_2d(network, 256, 3, activation='relu')
network = conv_2d(network, 256, 3, activation='relu')
network = max_pool_2d(network, 2, strides=2)

network = fully_connected(network, 1024, activation='relu')
network = dropout(network, 0.5)
network = fully_connected(network, 1024, activation='relu')
network = dropout(network, 0.5)
network = fully_connected(network, 10, activation='softmax')
network = regression(network, optimizer='rmsprop',
                     loss='categorical_crossentropy',
                     learning_rate=0.0001)


model = tflearn.DNN(network, checkpoint_path='model_1',
                    max_checkpoints=1, tensorboard_verbose=0)
model.fit(X, Y, n_epoch=200, shuffle=True,
          show_metric=True, batch_size=64, snapshot_step=200,
          snapshot_epoch=False, run_id='model_1')

Пожалуйста помоги.


person Fahim Sikder    schedule 14.05.2017    source источник


Ответы (1)


Ошибка говорит о том, что Tensorflow не может поместить тензор с формой [64,32,32] в другой тензор с формой [?,32,32,1], здесь ? означает размер пакета.

Ваша модель не может передавать ваши пакетные данные в переменную X, потому что они имеют разные формы, вам следует изменить свои формы X.

Изменить эту строку X, Y = image_preloader(dataset_file, image_shape=(32, 32), mode='file', categorical_labels=True, normalize=True)

to

X, Y = image_preloader(dataset_file, image_shape=(None, 32, 32, 1), mode='file', categorical_labels=True, normalize=True)

Надеюсь, это было полезно.

person Ali Abbasi    schedule 14.05.2017