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

时间:2018-01-29 02:55:28

标签: python tensorflow machine-learning keras jupyter-notebook

我正在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和six模块版本都是最新的。

什么可以解释这个AttributeError?

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

  

----------------------------------------------- ---------------------------- AttributeError Traceback(最近一次调用   最后)in()         3 model.add(密集(1,激活='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(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#准备验证数据。 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 =假    - > 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(数据,名称,形状,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)如果x不是None而x.ndim == 1则x为数据中的x]        71其他:        72 data = data.values if data。 class name =='DataFrame'else data

     

〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ training.py in   (0.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)如果x不是None而x.ndim == 1则x为数据中的x]        71其他:        72 data = data.values if data。 class name =='DataFrame'else data

     

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

3 个答案:

答案 0 :(得分:25)

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)

答案 1 :(得分:1)

导入时,应使用tensorflow.keras而不是像这样的keras

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

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

参考:here

答案 2 :(得分:-1)

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