前提・実現したいこと
mnistの畳み込みニューラルネットワークでのTSNE表示を行いたいがエラーが出てしまう。
対処法を教えていただきたいです。
発生している問題・エラーメッセージ
Found array with dim 4. Estimator expected <= 2.
該当のソースコード
ソースコード
import numpy as np
import matplotlib.pyplot as plt
import keras
import tensorflow as tf
from keras.models import Sequential
from keras.datasets import mnist,fashion_mnist
from keras.layers import Dense, Dropout, Activation, Conv2D, MaxPooling2D, Flatten
from keras.optimizers import rmsprop
from keras.utils.np_utils import to_categorical
from sklearn.manifold import TSNE
np.random.seed(7)
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1
)
from keras import backend as K
tf.set_random_seed(7)
sess = tf.Session(graph=tf.get_default_graph(),config=session_conf)
K.set_session(sess)
in_n = 784
class_n = 10
hidden_layers = 2
hidden_units = 10
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape([-1, 28, 28, 1])
x_test = x_test.reshape([-1, 28, 28, 1])
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
warna = []
bentuk = []
warna_code = ['red','blue','green','black','magenta','cyan','grey','aqua','springgreen','salmon']
bentuk_code = ['o','s','D','*','v','p','8','h','+','X']
pattern_n = range((int)(x_train.size/in_n))
print(pattern_n)
num_classes = 10
model = Sequential()
model.add(Conv2D(32, (3, 3),
input_shape=(28,28,1)))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3),))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
print(model.summary())
model.compile(
loss='categorical_crossentropy',
optimizer=rmsprop(lr=0.0001, decay=1e-6),
metrics=['accuracy'])
fit = model.fit(x_train, y_train,
batch_size=32,
epochs=1, #shouldn't be raised to 100, because the overfitting occurs.
verbose=2,
validation_split=0.1
)
score = model.evaluate(x_test, y_test,
verbose=0
)
print('Test score:', score[0])
print('Test accuracy:', score[1])
output = model.predict(x_train)
warna_output = []
for i in pattern_n:
warna_output.append(warna_code[np.argmax(output[i,:])])
X_reduced_input = TSNE(n_components=2, random_state=0).fit_transform(x_train)
for i in pattern_n:
plt.scatter(X_reduced_input[i,0], X_reduced_input[i,1], c=warna[i], marker=bentuk[i])
plt.show()
for vis_layer in range(2, hidden_layers*2,2):
get_layer_output = K.function([model.layers[0].input],[model.layers[vis_layer].output])
hidden_output = get_layer_output([x_train])[0]
X_reduced = TSNE(n_components=2, random_state=0).fit_transform(hidden_output)
for i in pattern_n:
plt.scatter(X_reduced[i,0], X_reduced[i,1], c=warna[i], marker=bentuk[i])
plt.show()
K.clear_session()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。