首页 文章

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

提问于
浏览
4

我在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(最近一次调用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#准备验证数据 . 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 )如果x不是None而x.ndim == 1其他x代表数据中的x]其他: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'use x for x in data] - - > 70 data = [np.expand_dims(x,1)如果x不是None而x.ndim == 1其他x表示数据中的x]其他:72 data = data.values if data.class.name =='DataFrame'else data AttributeError:'list'对象没有属性'ndim'

2 回答

  • 17

    model.fit 期望 xy 是numpy数组 . 好像你传递了一个列表,它试图通过读取numpy数组的 ndim 属性来获得输入的形状并且失败了 .

    你可以使用 np.array 简单地转换它:

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

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

相关问题