ValueError: Ошибка при проверке ввода: ожидалось, что dens_11_input имел 3 измерения, но получил массив с формой (0, 1) - PullRequest
0 голосов
/ 03 декабря 2018

Я новичок в машинном обучении и Python, и я пытаюсь сделать классификацию, рак у пациента или нет.Я нашел кусок кода из https://github.com/fahomid/ML-Tensorflow-Medical-Image/blob/master/tensorflow-model.py У меня есть небольшой набор данных.Учебная и тестовая наборы имеют два каталога пациентов, которые содержат файлы dicom только для попытки.Код выглядит следующим образом;

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
import os
import pydicom
import numpy as np
import PIL

# Generate data from dicom file
dataset = [];
labels = [];
for root, dirs, files in os.walk("training_data/Cancer"):
    for file in files:
        if file.endswith(".dcm"):
            ds = pydicom.dcmread(os.path.join(root, file))
            dataset.append(ds.pixel_array)
            labels.append(1);

for root, dirs, files in os.walk("training_data/Normal"):
   for file in files:
        if file.endswith(".dcm"):
            ds = pydicom.dcmread(os.path.join(root, file))
            dataset.append(ds.pixel_array)
            labels.append(0)


dataset_size = len(dataset)
dataset = np.asarray(dataset)
labels = np.asarray(labels)

# create model
model = Sequential()
model.add(Dense(32, activation='tanh', input_shape=(512, 512)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics= 
['accuracy'])
model.fit(dataset, labels, epochs=10, shuffle=True, batch_size=32)

# serialize model to JSON
model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model.h5")
print("\n\nModel saved to disk\n\n")
model.summary()

Строка сообщения об ошибке выглядит следующим образом:

model.fit (набор данных, метки, эпох = 10, случайное число = True, batch_size = 32)

ValueError: Ошибка при проверке ввода: ожидалось, что плотность_плота_3 имеет 3 измерения, но получил массив с формой (0, 1)

Спасибо за помощь.

1 Ответ

0 голосов
/ 05 декабря 2018

Следующий раздел вашего кода ищет файлы (с расширением .dcm), содержащие данные для Рака и Нормального человека.Он НЕ находит, поэтому ничего не возвращает.

# Generate data from dicom file
dataset = [];
labels = [];
for root, dirs, files in os.walk("training_data/Cancer"):
    for file in files:
        if file.endswith(".dcm"):
            ds = pydicom.dcmread(os.path.join(root, file))
            dataset.append(ds.pixel_array)
            labels.append(1);

for root, dirs, files in os.walk("training_data/Normal"):
   for file in files:
        if file.endswith(".dcm"):
            ds = pydicom.dcmread(os.path.join(root, file))
            dataset.append(ds.pixel_array)
            labels.append(0)

Значит, значение dataset переменной равно 0 , а labels переменной равно 1 .И когда вызывается метод model.fit, он ожидает, что вход будет 3 измерения с формой (512, 512), но он получает только вход с формой (0, 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...