web-dev-qa-db-ja.com

Keras AttributeError: 'list'オブジェクトには属性 'ndim'がありません

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)

Keras(Anaconda3)のrequirements.txtファイルをチェックしました。numpy、scipy、6つのモジュールバージョンはすべて最新です。

このAttributeErrorは何を説明できますか?

完全なエラーメッセージは次のとおりです(Numpyに多少関連しているようです):

-------------------------------------------------- ----------------------)3のAttributeErrorトレースバック(最後の最後の呼び出し)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、 **クワーグス)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.- -(クラス .-名前 == 'DataFrame' else data for x for data] ---> 70 data = [np.expand_dims(x、1)if x not None and x.ndim == 1 else x for data 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名前 == 'DataFrame' else x for data] ---> 70 data = [np.expand_dims(x、1)if xがNoneおよびx.ndim == 1 else xでない場合for data in 71] 71 else:72 data = data.values if data .class ..name == 'DataFrame' else data

AttributeError: 'list'オブジェクトには属性 'ndim'がありません

13
Larry

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)
29
CtheSky

インポートするときは、次のようにkerasだけでなくtensorflow.kerasを使用する必要があります。

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

kerasモジュールに関連するバグがあるためです。

参照: ここ

2
tsveti_iko

トレーニングデータの形状はわかりませんが、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)
0
Ioannis Nasios