Python Keras AttributeError: 'list' 对象没有属性 'ndim'

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/48493755/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 18:43:48  来源:igfitidea点击:

Keras AttributeError: 'list' object has no attribute 'ndim'

pythontensorflowmachine-learningkerasjupyter-notebook

提问by Larry

I'm running a Keras neural network model in Jupyter Notebook (Python 3.6)

我在 Jupyter Notebook (Python 3.6) 中运行 Keras 神经网络模型

I get the following error

我收到以下错误

AttributeError: 'list' object has no attribute 'ndim'

AttributeError: 'list' 对象没有属性 'ndim'

after calling the .fit() method from Keras.model

从 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)

I checked the requirements.txt file for Keras (in Anaconda3) and the numpy, scipy, and six module versions are all up to date.

我检查了 Keras(在 Anaconda3 中)的 requirements.txt 文件,并且 numpy、scipy 和六个模块版本都是最新的。

What can explain this AttributeError?

什么可以解释这个 AttributeError ?

The full error message is the following (seems to be somewhat related to Numpy):

完整的错误信息如下(似乎与 Numpy 有点相关):

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in () 3 model.add(Dense(1, activation = 'sigmoid')) 4 model.compile(loss='mean_squared_error', optimizer='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, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs) 963 initial_epoch=initial_epoch, 964 steps_per_epoch=steps_per_epoch, --> 965 validation_steps=validation_steps) 966 967 def evaluate(self, x=None, y=None,

~\Anaconda3\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs) 1591
class_weight=class_weight, 1592 check_batch_axis=False, -> 1593 batch_size=batch_size) 1594 # Prepare validation data. 1595 do_validation = False

~\Anaconda3\lib\site-packages\keras\engine\training.py in _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 output_shapes,

~\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 68 elif isinstance(data, list): 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 else: 72 data = data.values if data.class.name== 'DataFrame' else data

~\Anaconda3\lib\site-packages\keras\engine\training.py in (.0) 68 elif isinstance(data, list): 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 else: 72 data = data.values if data.class.name== 'DataFrame' else data

AttributeError: 'list' object has no attribute 'ndim'

-------------------------------------------------- ------------------------- AttributeError Traceback (most recent call last) in () 3 model.add(Dense(1, activation = 'sigmoid' )) 4 model.compile(loss='mean_squared_error', optimizer='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、validation_data、shuffle、class_weight、sample_weight、initial_epoch、steps_per_epoch、validation_steps、** kwargs)963initial_epoch=initial_epoch,964steps_per_epoch=steps_per_epoch,-->965validation_steps=validation_steps)966967def评估(自我,x=无,y=无,

~\Anaconda3\lib\site-packages\keras\engine\training.py in fit(self、x、y、batch_size、epochs、verbose、callbacks、validation_split、validation_data、shuffle、class_weight、sample_weight、initial_epoch、steps_per_epoch、validation_steps、 **kwargs) 1591
class_weight=class_weight, 1592 check_batch_axis=False, -> 1593 batch_size=batch_size) 1594 # 准备验证数据。第 1595 章

~\Anaconda3\lib\site-packages\keras\engine\training.py in _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输入') 1427 y = _standardize_input_data(y, self._feed_output_names,
1428 output_shapes,

~\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shape, check_batch_axis, exception_prefix) 68 elif isinstance(data, list): 69 data = [x.values if x. 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 else : 72 data = data.values 如果数据。名称== 'DataFrame' 其他数据

~\Anaconda3\lib\site-packages\keras\engine\training.py in (.0) 68 elif isinstance(data, list): 69 data = [x.values if x. 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 else : 72 data = data.values 如果数据。名称== 'DataFrame' 其他数据

AttributeError: 'list' 对象没有属性 'ndim'

回答by CtheSky

model.fitexpects xand yto be numpy array. Seems like you pass a list, it tried to get shape of input by reading ndimattribute of numpy array and failed.

model.fit期望xy是 numpy 数组。似乎您传递了一个列表,它试图通过读取ndimnumpy 数组的属性来获取输入的形状,但失败了。

You can simply transform it using np.array:

您可以简单地使用np.array以下方法对其进行转换:

import numpy as np
...
model.fit(np.array(train_X),np.array(train_Y), epochs=20, batch_size=10)

回答by tsveti_iko

When you import you should use tensorflow.kerasinstead of just keraslike this:

导入时,您应该使用tensorflow.keras而不是keras这样:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, Dense

because there is a bug related to the kerasmodule.

因为存在与keras模块相关的错误。

Reference: here.

参考:这里

回答by Ioannis Nasios

I don't know the shape of your training data but I suspect that you have an error on your input_dim. Try changing it to input_dim=len(X_data)like this:

我不知道您的训练数据的形状,但我怀疑您的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)