Последнее измерение входов в `Dense` должно быть определено.Найдено `Нет` - PullRequest
0 голосов
/ 13 февраля 2019

Я очень новичок в tenorflow и пытаюсь создать простой двоичный классификатор для своего собственного набора изображений.Все они - изображения в оттенках серого 226x226 PNG.Я продолжаю получать сообщение об ошибке «ValueError: должно быть определено последнее измерение входных данных для Dense. Найдено None».Я застрял на этом в течение нескольких дней и, похоже, не могу сформировать свою модель / набор данных таким образом, чтобы это работало.Может ли кто-нибудь помочь новичку?Любой, возможно, соответствующий код должен быть ниже.Заранее спасибо.

##img parser
def _parse_function(filename, label):
  image_string = tf.read_file(filename)
  image_decoded = tf.image.decode_png(image_string)
  image_decoded = tf.image.resize_images(image_decoded,[226,226])
  return image_decoded, label

#img processor function
#input: dir
#output: dataset
def imgPrcs(dir):
    labelArr = [];
    filenames = [];
    src = dir;

    for fname in os.listdir(src):
        png = os.path.join(src, fname);
        filenames.append(png);
        if os.path.isfile(png):
            #extract label
            with open(png, 'rb') as fobj:
                data = fobj.read()
            data_arr = [];
            for chunk_type, chunk_data in chunk_iter(data):
                if   chunk_type == b'iTXt':
                    data_arr.append(chunk_data.decode());
            label = int(data_arr[1][-1:]);

            #add label
            labelArr.append(label);

    labels = tf.constant(labelArr)
    filename_q = tf.constant(filenames)

    dataset = tf.data.Dataset.from_tensor_slices((filename_q, labels))
    dataset = dataset.map(_parse_function)

    #return variables
    return dataset;

#create labels and datasets
print('Compiling images and labels...\n');
trainData = imgPrcs('./train/');
testData = imgPrcs('./test/');
valData = imgPrcs('./validate/');


#Create Model
print('Creating Model...\n');
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(226, 226, None)),
    keras.layers.Dense(128, kernel_initializer='normal', activation='relu'),
    keras.layers.Dense(1,kernel_initializer='normal', activation='sigmoid')
])

print('compile...\n')
model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy']);


print('train..\n')
#Train Model
model.fit(trainData.make_one_shot_iterator(), epochs=5, steps_per_epoch=385)

print('test')
#Test Model
test_loss, test_acc = model.evaluate(testData.make_one_shot_iterator());

print('Test accuracy:', test_acc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...