ValueError:检查输入时出错:预期density_11_input具有3维,但数组的形状为(0,1)

时间:2018-12-03 16:23:44

标签: python keras conv-neural-network valueerror

我是机器学习和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:检查输入时出错:预期density_11_input为3     尺寸,但数组的形状为(0,1)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

代码的以下部分查找包含扩展名 Cancer Normal 的数据的文件(扩展名为.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方法时,它期望输入为(512, 512)形状的3维,但是它只能得到(0, 1)形状的输入。