python - ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到的数组形状为(0, 1)
问题描述
我是机器学习和 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(数据集,标签,epochs=10,shuffle=True,batch_size=32)
ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到的数组形状为(0, 1)
谢谢你的帮助。
解决方案
代码的以下部分查找包含癌症和正常人.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
variable 的值为0,labels
variable 为1。并且当该model.fit
方法被调用时,它期望输入是形状为 的 3 维(512, 512)
,但它只获取形状为 的输入(0, 1)
。
推荐阅读
- c++ - 如何从文本文件中读取二维数组并在 C++ 中打印
- pandas - 箱线图类别排序
- c++ - 静态和动态模板初始化可以交错吗?
- android - 无法在 API <21 上运行 UI 测试
- python - Python / Matplotlib - 如何在不硬编码的情况下计算/绘制导数?
- typescript - “可观察”类型上不存在“共享”
' - rust - map_err() 闭包参数的简洁类型?
- spring-boot - 线程“restartedMain”中的异常 java.lang.reflect.InvocationTargetException 引起:java.lang.NullPointerException
- node.js - Mongodb:值未保存在 db 中,但存在于模式的 console.log 中
- c - gcc 内联 x86 asm 代码产生垃圾结果