Keras AttributeError:“列表”对象没有属性“ndim”
Posted
技术标签:
【中文标题】Keras AttributeError:“列表”对象没有属性“ndim”【英文标题】:Keras AttributeError: 'list' object has no attribute 'ndim' 【发布时间】:2018-07-07 16:55:58 【问题描述】:我正在 Jupyter Notebook (Python 3.6) 中运行 Keras 神经网络模型
我收到以下错误
AttributeError: 'list' 对象没有属性 'ndim'
从 Keras.model 调用 .fit() 方法后
model = Sequential()
model.add(Dense(5, input_dim=len(X_data[0]), activation='sigmoid' ))
model.add(Dense(1, activation = 'sigmoid'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['acc'])
model.fit(X_data, y_data, epochs=20, batch_size=10)
我检查了 Keras(在 Anaconda3 中)的 requirements.txt 文件,numpy、scipy 和六个模块版本都是最新的。
什么可以解释这个AttributeError?
完整的错误信息如下(似乎与 Numpy 有点相关):
----------------------------------- ---------------------------- AttributeError Traceback(最近调用 最后)在() 3 model.add(密集(1,激活='sigmoid')) 4 model.compile(loss='mean_squared_error',优化器='adam',metrics=['acc']) ----> 5 model.fit(X_data, y_data, epochs=20, batch_size=10)
~\Anaconda3\lib\site-packages\keras\models.py in fit(self, x, y, batch_size、epochs、verbose、回调、validation_split、 验证数据,洗牌,类权重,样本权重,初始时期, steps_per_epoch, validation_steps, **kwargs) 第963章 第964章 --> 965 验证步骤=验证步骤) 966 第967章
~\Anaconda3\lib\site-packages\keras\engine\training.py in fit(self, x, y,batch_size,epochs,详细,回调,validation_split, 验证数据,洗牌,类权重,样本权重,初始时期, steps_per_epoch, validation_steps, **kwargs) 1591 类重量=类重量,1592 check_batch_axis=假, -> 1593 batch_size=batch_size) 1594 # 准备验证数据。第1595章
~\Anaconda3\lib\site-packages\keras\engine\training.py 在 _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size) 1424 self._feed_input_shapes,1425 check_batch_axis=False, -> 1426 exception_prefix='input')1427 y = _standardize_input_data(y,self._feed_output_names, 第1428章
~\Anaconda3\lib\site-packages\keras\engine\training.py 在 _standardize_input_data(数据、名称、形状、check_batch_axis、exception_prefix) 68 elif isinstance(数据,列表): 69 data = [x.values if x.class.name == 'DataFrame' else x for x in data] ---> 70 data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data] 其他 71 条: 72 data = data.values if data.class.name == 'DataFrame' else data
~\Anaconda3\lib\site-packages\keras\engine\training.py 在 (.0) 68 elif isinstance(数据,列表): 69 data = [x.values if x.class.name == 'DataFrame' else x for x in data] ---> 70 data = [np.expand_dims(x, 1) if x is not None and x.ndim == 1 else x for x in data] 其他 71 条: 72 data = data.values if data.class.name == 'DataFrame' else data
AttributeError: 'list' 对象没有属性 'ndim'
【问题讨论】:
【参考方案1】:model.fit
期望 x 和 y 是 numpy 数组。好像您传递了一个列表,它试图通过读取 numpy 数组的 ndim
属性来获取输入的形状,但失败了。
您可以使用np.array
简单地对其进行转换:
import numpy as np
...
model.fit(np.array(train_X),np.array(train_Y), epochs=20, batch_size=10)
【讨论】:
这就是问题所在。修复!不过有趣的是,因为即使数据是双矩阵而不是 numpy 数组,Keras 也可以在另一台计算机上运行。感谢您的帮助!【参考方案2】:我不知道您的训练数据的形状,但我怀疑您的 input_dim
有错误。尝试将其更改为 input_dim=len(X_data)
,如下所示:
model = Sequential()
model.add(Dense(5, input_dim=len(X_data), activation='sigmoid' ))
model.add(Dense(1, activation = 'sigmoid'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['acc'])
model.fit(X_data, y_data, epochs=20, batch_size=10)
【讨论】:
X_data 有 5 个特征,y_data 有 2 个特征。输出数据可能是原因,但切换到 numpy 数组可以解决问题。【参考方案3】:当您导入时,您应该使用 tensorflow.keras
而不仅仅是 keras
,如下所示:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, Dense
因为有一个与keras
模块相关的错误。
参考:here。
【讨论】:
这是用于 tensorflow 2.x 的吗?以上是关于Keras AttributeError:“列表”对象没有属性“ndim”的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:模块 'keras.utils' 没有属性 'Sequence'
如何修复 AttributeError:模块 'tensorflow' 没有属性 'keras'?
AttributeError:无法导入 keras 和分割模型
AttributeError:模块'tensorflow_core.python.keras.api._v2.keras.activations'没有属性'swish'