我在 Jupyter Notebook 中运行一个 Keras 神经网络模型(Python 3.6)
我遇到了以下错误
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)
我检查了 Anaconda3 中 Keras 的 requirements.txt 文件,numpy、scipy 和 six 模块的版本都是最新的。
如何解释这个 AttributeError?
完整的错误消息如下(似乎与 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’ 对象没有 ‘ndim’ 属性
回答:
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)