В настоящее время я вхожу в схватку с TensorFlow и реализовал базовую многослойную модель персептрона с 3 скрытыми слоями, следуя инструкциям sentdex на YouTube.
Мне было интересно, как я могу получить эти обученные веса / смещения каждого слоя и, если возможно, также назначить эти восстановленные матрицы определенному слою и т. Д. Хотя для меня, вероятно, нет особого смысла делать это, моя цель просто для того, чтобы поэкспериментировать и увидеть результат воздействия, а также познакомиться с TensorFlow.
Я рассмотрел некоторые предложения, чтобы использовать tf.trainable_variables()
, но все еще не могу прийти в себя. Я могу думать о том, чтобы инициализировать, а затем назначить ему предопределенные переменные в конце, что может быть немного беспорядочно, даже если оно работает.
class expFFNN():
def __init__(self):
self.nNodesHidL1 = 500
self.nNodesHidL2 = 500
self.nNodesHidL3 = 500
self.nClass = 10
self.batch_size = 100
self.x = tf.placeholder('float', [None, 784])
self.y = tf.placeholder('float')
self.h1Weights = tf.Variable(tf.random_normal([784, self.nNodesHidL1]))
self.h2Weights = tf.Variable(tf.random_normal([self.nNodesHidL1, self.nNodesHidL2]))
self.h3Weights = tf.Variable(tf.random_normal([self.nNodesHidL2, self.nNodesHidL3]))
self.outWeights = tf.Variable(tf.random_normal([self.nNodesHidL3, self.nClass]))
self.h1Biases = tf.Variable(tf.random_normal([self.nNodesHidL1]))
self.h2Biases = tf.Variable(tf.random_normal([self.nNodesHidL2]))
self.h3Biases = tf.Variable(tf.random_normal([self.nNodesHidL3]))
self.outBiases = tf.Variable(tf.random_normal([self.nClass]))
self.finH1W = []
self.finH2W = []
self.finH3W = []
self.finH1B = []
self.finH2B = []
self.finH2B = []
def neural_network_model(self, data):
h1Layer = {'weights':self.h1Weights,
'biases':self.h1Biases}
h2Layer = {'weights':self.h2Weights,
'biases':self.h2Biases}
h3Layer = {'weights':self.h3Weights,
'biases':self.h3Biases}
outputLayer = {'weights':self.outWeights,
'biases':self.outBiases}
layer1 = tf.add(tf.matmul(data, h1Layer['weights']), h1Layer['biases'])
layer1 = tf.nn.relu(layer1)
layer2 = tf.add(tf.matmul(layer1, h2Layer['weights']), h2Layer['biases'])
layer2 = tf.nn.relu(layer2)
layer3 = tf.add(tf.matmul(layer2, h3Layer['weights']), h3Layer['biases'])
layer3 = tf.nn.relu(layer3)
output = tf.add(tf.matmul(layer3, outputLayer['weights']), outputLayer['biases'])
return output
def trainNeuralNetwork(self, x):
y = self.y
prediction = neural_network_model(self, x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=self.y))
optimizer = tf.train.AdamOptimizer().minimize(cost)
hmEpochs = 3
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(hmEpochs):
epochLoss = 0
for _ in range(int(mnist.train.num_examples/self.batch_size)):
epoch_x, epoch_y = mnist.train.next_batch(self.batch_size)
_, c = sess.run([optimizer, cost], feed_dict = {self.x:epoch_x, self.y:epoch_y})
epochLoss += c
print ('Epoch', epoch, 'completed out of', hmEpochs, 'loss:', epochLoss)
correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
self.finH1W = self.h1Weights
self.finH2W = self.h2Weights
self.finH3W = self.h3Weights
self.finH1B = self.h1Biases
self.finH2B = self.h2Biases
self.finH3B = self.h3Biases
print('Accuracy', accuracy.eval({x:mnist.test.images, self.y:mnist.test.labels}))