ValueError:sequence_9层的输入0与该层不兼容::预期的min_ndim = 4,找到的ndim = 3收到的完整图形:[无,无,无]

如何解决ValueError:sequence_9层的输入0与该层不兼容::预期的min_ndim = 4,找到的ndim = 3收到的完整图形:[无,无,无]

我正在尝试解决分类问题。我不知道为什么会收到此错误

ValueError: Input 0 of layer sequential_9 is incompatible with the layer: : expected min_ndim=4,found ndim=3. Full shape received: [None,None,None]

这是主要代码

model = createModel()
filesPath=getFilesPathWithoutSeizure(i,indexPat)
history=model.fit_generator(generate_arrays_for_training(indexPat,filesPath,end=75)##problem here
def createModel():
    input_shape=(1,11,3840)
    model = Sequential()
    #C1
    model.add(Conv2D(16,(5,5),strides=( 2,2),padding='same',activation='relu',data_format= "channels_first",input_shape=input_shape))
    model.add(keras.layers.MaxPooling2D(pool_size=( 2,padding='same'))
    model.add(Batchnormalization())
    #C2
    model.add(Conv2D(32,( 3,3),strides=(1,1),activation='relu'))#incertezza se togliere padding
    model.add(keras.layers.MaxPooling2D(pool_size=(2,padding='same'))
    model.add(Batchnormalization())
    #c3
    model.add(Conv2D(64,(3,strides=( 1,padding='same'))
    model.add(Batchnormalization())
    model.add(Flatten())
    model.add(Dropout(0.5))
    model.add(Dense(256,activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(2,activation='softmax'))
    opt_adam = keras.optimizers.Adam(lr=0.00001,beta_1=0.9,beta_2=0.999,epsilon=1e-08,decay=0.0)
    model.compile(loss='categorical_crossentropy',optimizer=opt_adam,metrics=['accuracy'])
    
    return model

错误

    history=model.fit_generator(generate_arrays_for_training(indexPat,end=75),#end=75),#It take the first 75%
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/util/deprecation.py",line 324,in new_func
    return func(*args,**kwargs)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py",line 1815,in fit_generator
    return self.fit(
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py",line 108,in _method_wrapper
    return method(self,*args,line 1098,in fit
    tmp_logs = train_function(iterator)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py",line 780,in __call__
    result = self._call(*args,**kwds)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py",line 823,in _call
    self._initialize(args,kwds,add_initializers_to=initializers)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py",line 696,in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py",line 2855,in _get_concrete_function_internal_garbage_collected
    graph_function,_,_ = self._maybe_define_function(args,kwargs)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py",line 3213,in _maybe_define_function
    graph_function = self._create_graph_function(args,line 3065,in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py",line 986,in func_graph_from_py_func
    func_outputs = python_func(*func_args,**func_kwargs)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py",line 600,in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args,**kwds)
  File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py",line 973,in wrapper
    raise e.ag_error_Metadata.to_exception(e)
ValueError: in user code:

    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:806 train_function  *
        return step_function(self,iterator)
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step,args=(data,))
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn,args=args,kwargs=kwargs)
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn,args,kwargs)
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
        return fn(*args,**kwargs)
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:789 run_step  **
        outputs = model.train_step(data)
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:747 train_step
        y_pred = self(x,training=True)
    /home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py:975 __call__
        input_spec.assert_input_compatibility(self.input_spec,inputs,/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/input_spec.py:191 assert_input_compatibility
        raise ValueError('Input ' + str(input_index) + ' of layer ' +

    ValueError: Input 0 of layer sequential_9 is incompatible with the layer: : expected min_ndim=4,None]

解决方法

Keras实际上总是隐藏0-th维度,也称为batch维度。实际上,在您放置input_shape = (A,B,C)的所有位置均不应该提及批次尺寸,(A,C)应该是一个对象的形状(在您的情况下为图像)。例如,如果您说input_shape = (1,11,3840),则实际上意味着用于训练或预测的数据应该是一个类似(7,1,3840)的形状的numpy数组,即,训练中有7个对象。因此,7是批处理的大小,是要并行训练的对象数。

因此,如果您的一个对象(例如图像)的形状为(11,3840),那么您就必须在各处写上input_shape = (11,3840),而不必提及批量大小。

为什么Keras隐藏0-th批次尺寸?由于keras期望批量大小不同,因此今天您可以提供7个对象,明天提供9个对象,并且相同的网络将同时适用于这两个对象。但是(11,3840)的一个对象的形状永远不会改变,并且由函数generate_arrays_for_training()生成的训练数据必须始终为(BatchSize,3840),其中BatchSize可以变化,您可以生成一批179对象-每个形状为(11,3840)的图像。

如果所有图层的图像都应是3维的1通道,则必须扩展生成的训练数据的暗淡程度,请使用this function进行X = np.expand_dims(X,0),以使训练X数据为形状(1,3840),例如批处理1个对象,只有这样,您才能拥有input_shape = (1,3840)

我还看到您正在data_format= "channels_first"处编写代码,默认情况下所有功能都是channels_last,为了不到处编写此代码,您可以一次修改generate_arrays_for_training()数据生成的数据,如果形状为X的{​​{1}},则您进行(1,3840)。您的频道将成为最后的维度。

转置将一个尺寸移动到另一位置。但是对于您的情况,因为您只有X = X.transpose(0,2,3,1)个频道,而不是移调,您可以重塑例如形状为1的{​​{1}}可以通过X重塑形状,并且形状为(1,3840)。仅当您不想在任何地方都写X = X.reshape(1,3840,1)时才需要这样做,但是如果您不想美化代码而根本不需要转置/重塑,就不需要这样做!

我记得我过去的Keras不喜欢大小为1的尺寸,它基本上是尝试通过几种不同的功能将其移除,即,如果keras看到形状为(1,1)的阵列,则几乎总是尝试对其进行整形成为"channels_first"。因此(1,4)实际上被忽略了。在这种情况下,可能唯一的解决方案是至少生成一批大小为2的图像。

您也可以阅读我的long answer,尽管它一点儿无关,但可以帮助您了解Keras中的训练/预测如何工作,尤其是您可以阅读编号为(2,4)的最后一段。 / p>

更新:似乎是由于下一个修改的帮助而解决了该问题:

  1. 在数据生成功能中,需要进行两次变暗,即np.expand_dims()

  2. 在数据生成功能中,还需要另一个1-12

  3. 将网络输入形状的代码设置为X = np.expand_dims(np.expand_dims(X,0),0)

  4. 在网络代码中,所有子串X = X.transpose(0,1)均被删除。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?