3D 卷积神经网络输入形状

2024-05-02

我在使用 3D CNN 提供数据时遇到问题Keras http://keras.io和 Python 对 3D 形状进行分类。我有一个文件夹,其中包含一些 JSON 格式的模型。我将这些模型读入 Numpy 数组。模型为 25*25*25,表示体素化模型的占用网格(每个位置表示位置 (i,j,k) 中的体素是否有点),所以我只有 1 个输入通道,就像二维图像中的灰度图像一样。我的代码如下:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution3D, MaxPooling3D
from keras.optimizers import SGD
from keras.utils import np_utils
from keras import backend as K

# Number of Classes and Epochs of Training
nb_classes = 3 # cube, cone or sphere
nb_epoch = 100
batch_size = 2

# Input Image Dimensions
img_rows, img_cols, img_depth = 25, 25, 25

# Number of Convolutional Filters to use
nb_filters = 32

# Convolution Kernel Size
kernel_size = [5,5,5]

X_train, Y_train = [], []

# Read from File
import os
import json

i=0
for filename in os.listdir(os.path.join(os.getcwd(), 'models')):
    with open(os.path.join(os.getcwd(), 'models', filename)) as f:
        file = f.readlines()
        json_file = '\n'.join(file)
        content = json.loads(json_file)
        occupancy = content['model']['occupancy']
        form = []
        for value in occupancy:
            form.append(int(value))
        final_model = [ [ [ 0 for i in range(img_rows) ]
                              for j in range(img_cols) ]
                              for k in range(img_depth) ]
        a = 0
        for i in range(img_rows):
            for j in range(img_cols):
                for k in range(img_depth):
                    final_model[i][j][k] = form[a]
                    a = a + 1
        X_train.append(final_model)
        Y_train.append(content['model']['label'])

X_train = np.array(X_train)
Y_train = np.array(Y_train)

# (1 channel, 25 rows, 25 cols, 25 of depth)
input_shape = (1, img_rows, img_cols, img_depth)

# Init
model = Sequential()

# 3D Convolution layer
model.add(Convolution3D(nb_filters, kernel_size[0], kernel_size[1], kernel_size[2],
                        input_shape=input_shape,
                        activation='relu'))

# Fully Connected layer
model.add(Flatten())
model.add(Dense(128,
          init='normal',
          activation='relu'))
model.add(Dropout(0.5))

# Softmax Layer
model.add(Dense(nb_classes,
                init='normal'))
model.add(Activation('softmax'))

# Compile
model.compile(loss='categorical_crossentropy',
              optimizer=SGD())

# Fit network
model.fit(X_train, Y_train, nb_epoch=nb_epoch,
         verbose=1)

之后,我收到以下错误

使用 TensorFlow 后端。回溯(最近一次调用最后一次):文件 “/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/common_shapes.py”, 第 670 行,在 _call_cpp_shape_fn_impl 中 状态)文件“/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py”, 89 号线,在exit下一个(self.gen)文件“/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py”, 第 469 行,在 raise_exception_on_not_ok_status 中 pywrap_tensorflow.TF_GetCode(状态))tensorflow.python.framework.errors_impl.InvalidArgumentError:负数 'Conv3D' 的 1 减去 5 产生的尺寸大小(操作: 'Conv3D'),输入形状:[?,1,25,25,25],[5,5,5,25,32]。

在处理上述异常的过程中,又出现了一个异常:

回溯(最近一次调用最后一次):文件“CNN_3D.py”,第 76 行,位于 激活='relu'))文件“/usr/local/lib/python3.6/site-packages/keras/models.py”,第299行,在 添加 layer.create_input_layer(batch_input_shape, input_dtype) 文件“/usr/local/lib/python3.6/site-packages/keras/engine/topology.py”, 第 401 行,在 create_input_layer 中 self(x) 文件“/usr/local/lib/python3.6/site-packages/keras/engine/topology.py”, 第 572 行,在callself.add_inbound_node(inbound_layers,node_indices,tensor_indices)文件 “/usr/local/lib/python3.6/site-packages/keras/engine/topology.py”, 第 635 行,在 add_inbound_node 中 Node.create_node(self,inbound_layers,node_indices,tensor_indices)文件 “/usr/local/lib/python3.6/site-packages/keras/engine/topology.py”, 第 166 行,在 create_node 中 output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0])) 文件 “/usr/local/lib/python3.6/site-packages/keras/layers/convolutional.py”, 1234线,通话中 filter_shape=self.W_shape)文件“/usr/local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py”, 第 2831 行,在 conv3d 中 x = tf.nn.conv3d(x, 内核, 步幅, 填充) 文件 "/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/gen_nn_ops.py", 第 522 行,在 conv3d 中 strides=strides,padding=padding,name=name)文件“/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py”, 第 763 行,在 apply_op 中 op_def=op_def) 文件“/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py”, 第 2397 行,在 create_op 中 set_shapes_for_outputs(ret) 文件“/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py”, 第 1757 行,在 set_shapes_for_outputs 中 Shapes = shape_func(op) 文件“/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py”, 第 1707 行,在 call_with_requireing 中 返回 call_cpp_shape_fn(op, require_shape_fn=True) 文件 "/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/common_shapes.py", 第 610 行,在 call_cpp_shape_fn 中 debug_python_shape_fn,require_shape_fn)文件“/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/common_shapes.py”, 第 675 行,在 _call_cpp_shape_fn_impl 中 raise ValueError(err.message) ValueError:由于输入的“Conv3D”(操作:“Conv3D”)从 1 减去 5 导致负尺寸大小 形状:[?,1,25,25,25],[5,5,5,25,32]。

我做错了什么才会出现这个错误?


我认为问题在于您在 Theano 排序中设置输入形状,但您正在使用带有 Tensorflow 后端和 Tensorflow img 排序的 Keras。此外,y_train 数组必须转换为分类标签。

更新的代码:

from keras.utils import np_utils
from keras import backend as K

if K.image_dim_ordering() == 'th':
    X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols, img_depth)
    input_shape = (1, img_rows, img_cols, img_depth)
else:
    X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, img_depth, 1)
    input_shape = (img_rows, img_cols, img_depth, 1)

Y_train = np_utils.to_categorical(Y_train, nb_classes)

添加这一行应该可以修复它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D 卷积神经网络输入形状 的相关文章

  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何解决使用 Spark 从 S3 重新分区大量数据时从内存中逐出缓存的表分区元数据的问题?

    在尝试从 S3 重新分区数据帧时 我收到一个一般错误 Caused by org apache spark SparkException Job aborted due to stage failure Task 33 in stage 1
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐