Tensorflow 在Keras中使用3D CNN时出错

Tensorflow 在Keras中使用3D CNN时出错,tensorflow,deep-learning,keras,conv-neural-network,keras-layer,Tensorflow,Deep Learning,Keras,Conv Neural Network,Keras Layer,我正在尝试使用aa 3D CNN进行3D大脑图像分类。我有预处理的图像作为输入 目前,这是一个仅针对8名患者的实验,直到我成功运行代码为止。验证拆分为0.1 import os import glob import dicom import numpy as np import pandas as pd import scipy.ndimage import keras import tensorflow from keras.models import Sequential from kera

我正在尝试使用aa 3D CNN进行3D大脑图像分类。我有预处理的图像作为输入

目前,这是一个仅针对8名患者的实验,直到我成功运行代码为止。验证拆分为0.1

import os
import glob
import dicom
import numpy as np
import pandas as pd
import scipy.ndimage
import keras
import tensorflow
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Flatten
from keras.layers.convolutional import Convolution3D, MaxPooling3D, 
ZeroPadding3D
from keras.optimizers import SGD
from keras.callbacks import EarlyStopping, ModelCheckpoint

images_path = '/Users/rahulpaul/Desktop/data/'


def get_3d_data(path):
    slices = [dicom.read_file(path + '/' + s) for s in os.listdir(path)]
    slices.sort(key = lambda x: int(x.InstanceNumber))
    return np.stack([s.pixel_array for s in slices])

patients = os.listdir(images_path)
patients.sort()

sample_image = get_3d_data(images_path + patients[0])

labels_csv = 
pd.read_csv('/Users/rahulpaul/Desktop/exp/stage1_labels.csv', index_col='id')

# Remove the (single) unlabbeled patient from our list
patients = labels_csv.ix[patients].dropna().index

# And finally get the training labels
train_labels = labels_csv.ix[patients].cancer.astype(np.float16).as_matrix()
train_labels = train_labels.reshape([len(train_labels), 1])

def process_image(path):
    img = get_3d_data(path)
    img[img == -2000] = 0
    img = scipy.ndimage.zoom(img.astype(np.float), 0.25)
    img_std = np.std(img)
    img_avg = np.average(img)
    return np.clip((img - img_avg + img_std) / (img_std * 2), 0, 1).astype(np.float16)


train_features = np.zeros([len(patients), 1, 128, 128, 128], np.float16)
for i in range(len(patients)):
    f = process_image(images_path + patients[i])
    f = np.concatenate([f, np.zeros([128 - f.shape[0], 128, 128], np.float16)]) # Pads the image
    f = f.reshape([1, 128, 128, 128]) # add an extra dimension for the color channel
    train_features[i] = f


nn = keras.models.Sequential([
        keras.layers.convolutional.Convolution3D(32, 3, 3, 3, border_mode='same', activation='relu', input_shape=train_features.shape[1:], dim_ordering='th'),
        keras.layers.convolutional.MaxPooling3D((2, 2, 2), (2, 2, 2), dim_ordering='th'),
        keras.layers.convolutional.Convolution3D(32, 3, 3, 3, border_mode='same', activation='relu', dim_ordering='th'),
        keras.layers.convolutional.MaxPooling3D((2, 2, 2), (2, 2, 2), dim_ordering='th'),
        keras.layers.convolutional.Convolution3D(64, 3, 3, 3, border_mode='same', activation='relu', dim_ordering='th'),
        keras.layers.convolutional.MaxPooling3D((2, 2, 2), (2, 2, 2), dim_ordering='th'),
        keras.layers.convolutional.Convolution3D(64, 3, 3, 3, border_mode='same', activation='relu', dim_ordering='th'),
        keras.layers.convolutional.MaxPooling3D((2, 2, 2), (2, 2, 2), dim_ordering='th'),
        keras.layers.convolutional.Convolution3D(128, 3, 3, 3, border_mode='same', activation='relu', dim_ordering='th'),
        keras.layers.convolutional.MaxPooling3D((2, 2, 2), (2, 2, 2), dim_ordering='th'),
        keras.layers.convolutional.Convolution3D(256, 3, 3, 3, border_mode='same', activation='relu', dim_ordering='th'),
        keras.layers.convolutional.AveragePooling3D((4, 4, 4), dim_ordering='th'),
        keras.layers.core.Flatten(),
        keras.layers.core.Dense(32, activation='relu'),
        keras.layers.BatchNormalization(),
        keras.layers.core.Dense(1, activation='sigmoid')
])
nn.compile(optimizer=keras.optimizers.Adam(), loss='binary_crossentropy', metrics=['accuracy'])


nn.fit(train_features, train_labels, batch_size=1,validation_split=0.1, nb_epoch=1)
但是我在运行代码时遇到了一个错误。我尝试了Tensorflow和Theano后端,但得到了相同的错误

Train on 0 samples, validate on 0 samples
Epoch 1/1
Traceback (most recent call last):
 File "third.py", line 84, in <module>
    nn.fit(train_features, train_labels, batch_size=1,validation_split=0.1, nb_epoch=1)
   File "/usr/local/lib/python2.7/site-packages/keras/models.py", line 672, in fit
initial_epoch=initial_epoch)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line 1196, in fit
initial_epoch=initial_epoch)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line 911, in _fit_loop
callbacks.on_epoch_end(epoch, epoch_logs)
  File "/usr/local/lib/python2.7/site-packages/keras/callbacks.py", line 76, in on_epoch_end
callback.on_epoch_end(epoch, logs)
  File "/usr/local/lib/python2.7/site-packages/keras/callbacks.py", line 265, in on_epoch_end
self.progbar.update(self.seen, self.log_values, force=True)
AttributeError: 'ProgbarLogger' object has no attribute 'log_values'
对0个样本进行训练,对0个样本进行验证
纪元1/1
回溯(最近一次呼叫最后一次):
文件“third.py”,第84行,在
nn.拟合(序列特征、序列标签、批次大小=1、验证分割=0.1、nb\U历元=1)
文件“/usr/local/lib/python2.7/site packages/keras/models.py”,第672行
初始_历元=初始_历元)
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第1196行
初始_历元=初始_历元)
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第911行,循环中
回调。在epoch\u结束时(epoch,epoch\u日志)
文件“/usr/local/lib/python2.7/site packages/keras/callbacks.py”,第76行,在末尾
回调。在\u epoch\u结束时(epoch,日志)
文件“/usr/local/lib/python2.7/site packages/keras/callbacks.py”,第265行,在末尾
self.progbar.update(self.seen、self.log_值,force=True)
AttributeError:“ProgbarLogger”对象没有属性“log\u值”

有人能帮我修改代码吗?

您使用的是什么Keras版本?问题似乎出在Keras的代码中。len(train_功能)的输出是什么?能否尝试暂时删除验证拆分?可能会抛出此错误,因为如果您只有8个样本(据我所知),则0.1的拆分小于1。@petezurich我尝试将0.25、0.5作为验证拆分。“但错误仍然在发生。@彼得苏黎世我也尝试过……通过删除验证分割,只保留列车数据。。。但还是一样的错误。你用的是什么Keras版本?问题似乎出在Keras的代码中。len(train_功能)的输出是什么?能否尝试暂时删除验证拆分?可能会抛出此错误,因为如果您只有8个样本(据我所知),则0.1的拆分小于1。@petezurich我尝试将0.25、0.5作为验证拆分。“但错误仍然在发生。@彼得苏黎世我也尝试过……通过删除验证分割,只保留列车数据。。。但还是同样的错误。