Zrobiłem co w mojej mocy, aby śledzić przewodniki online dotyczące struktury sieci neuronowych, ale brakuje mi czegoś fundamentalnego. Biorąc pod uwagę zestaw wyszkolonych wag wraz z ich stronniczością, chciałbym po prostu przewidzieć dane wejściowe ręcznie z tymi wagami bez użycia metody przewidywania.Jak używać wag do ręcznego przewidywania danych w sieci neuronowej za pomocą karasa
Używanie obrazów MNIST z aparatami Próbowałem ręcznie edytować moje dane w celu dodania dodatkowej funkcji do stronniczości, jednak ten wysiłek wydaje się nie zapewniać lepszej dokładności obrazu, niż w przypadku braku stronniczości i zdecydowanie mniejszej dokładności niż za pomocą metody przewidywania keras. Mój kod jest poniżej wraz z moją próbą.
Należy zwrócić uwagę na dwa komentarze w pobliżu dna, aby przewidzieć metodę keras w celu uzyskania dokładnej reprezentacji obrazu, a następnie moją słabą próbę ręcznego pobrania wag i dodania odchylenia.
from keras.datasets import mnist
import numpy as np
import time
from keras.models import Sequential
from keras.layers import Dense
import tensorflow as tf
from matplotlib import pyplot as plt
comptime=time.time()
with tf.device('/cpu:0'):
tf.placeholder(tf.float32, shape=(None, 20, 64))
seed = 7
np.random.seed(seed)
model = Sequential()
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32')/255.
priorShape_x_train=x_train.shape #prior shape of training set
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))
x_train_shaped=x_train
model.add(Dense(32, input_dim=784, init='uniform', activation='relu'))
model.add(Dense(784, init='uniform', activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adadelta', metrics=['accuracy'])
model.fit(x_train[1:2500], x_train[1:2500], nb_epoch=10)
#proper keras prediction
prediction_real=model.predict(x_train[57:58])
prediction_real=prediction_real.reshape((28,28))
#manual weight prediction attempt
x_train=np.hstack([x_train,np.zeros(x_train.shape[0]).reshape(x_train.shape[0],1)]) #add extra column for bias
x_train[:,-1]=1 #add placeholder as 1
weights=np.vstack([model.get_weights()[0],model.get_weights()[1]]) #add trained weights as extra row vector
prediction=np.dot(x_train,weights) #now take dot product.. repeat pattern for next layer
prediction=np.hstack([prediction,np.zeros(prediction.shape[0]).reshape(prediction.shape[0],1)])
prediction[:,-1]=1
weights=np.vstack([model.get_weights()[2],model.get_weights()[3]])
prediction=np.dot(prediction,weights)
prediction=prediction.reshape(priorShape_x_train)
plt.imshow(prediction[57], interpolation='nearest',cmap='gray')
plt.savefig('myprediction.png') #my prediction, not accurate
plt.imshow(prediction_real,interpolation='nearest',cmap='gray')
plt.savefig('realprediction.png') #in-built keras method, accurate