前提・実現したいこと
アヤメの分類をDeep learinigで行い、SHAPを使って
特徴変数の影響度の説明をしようと思っています。
Explainerを実装中に以下のエラーメッセージが発生しました。
プログラミングをはじめて半年ほどで、
初の質問ですので記入不足等あったらすみません。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) /usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py in assert_input_compatibility(self, inputs) 309 try: --> 310 K.is_keras_tensor(x) 311 except ValueError: 6 frames ValueError: Unexpectedly found an instance of type `<class 'numpy.ndarray'>`. Expected a symbolic tensor instance. During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) /usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py in assert_input_compatibility(self, inputs) 314 'Received type: ' + 315 str(type(x)) + '. Full input: ' + --> 316 str(inputs) + '. All inputs to the layer ' 317 'should be tensors.') 318 ValueError: Layer sequential_6 was called with an input that isn't a symbolic tensor. Received type: <class 'numpy.ndarray'>. Full input: [array([[-0.90068117, 0.55861082,…
該当のソースコード
python,keras
1#データセット読み込み 2from sklearn import datasets 3iris = datasets.load_iris() 4 5from sklearn.model_selection import train_test_split as split 6x_train, x_test, y_train, y_test = split(iris.data,iris.target,train_size=0.8,test_size=0.2) 7 8import numpy as np 9import pandas as pd 10 11 12iris_data=pd.DataFrame(iris.data) 13iris_label=pd.DataFrame(iris.target) 14 15from sklearn import preprocessing 16 17#mini-maxスケール変換 18minimax_scale=preprocessing.MinMaxScaler(feature_range=(0,1)) 19iris_data=minimax_scale.fit_transform(iris_data) 20 21#データの標準化 22scaler=preprocessing.StandardScaler() 23iris_data=scaler.fit_transform(iris_data) 24iris_data=pd.DataFrame(iris_data) 25 26import keras 27 28onehot_label=keras.utils.np_utils.to_categorical(iris_label.astype('int32'),3) 29 30X=iris_data 31Y=onehot_label 32 33X=np.asarray(X) 34Y=np.asarray(Y) 35 36print(X.shape) 37print(Y.shape) 38 39from sklearn.model_selection import train_test_split 40 41x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,train_size=0.8,shuffle=True) 42 43from keras.models import Sequential 44from keras.layers.core import Dense, Activation 45 46model=Sequential() 47 48model.add(Dense(16, input_shape=(4,))) 49model.add(Activation('relu')) 50 51model.add(Dense(3)) 52model.add(Activation('softmax')) 53 54model.compile(optimizer='adam', loss='categorical_crossentropy', 55 metrics=['accuracy']) 56 57hist=model.fit(x_train,y_train, 58 epochs=50, 59 batch_size=1, 60 verbose=1, 61 validation_data=(x_test,y_test)) 62 63#SHAPを用いた説明 64import shap 65 66explainer = shap.DeepExplainer(model,x_test)
試したこと
入力をSymbolic Tensorにしなければならない?ことは理解しました。
GradientExplainerにするとなぜかうまくいきました。
補足情報(FW/ツールのバージョンなど)
Google Colabでプログラミングをしています
あなたの回答
tips
プレビュー