Ошибка обновления точности в Tensorflow CNN - PullRequest
1 голос
/ 02 апреля 2020

Я написал программу для классификации рукописных цифр с использованием набора данных MNIST по рукописным цифрам. Учебная часть идет хорошо, но точность не обновляется в программе должным образом. После первых двух итераций точность остается неизменной до конца программы. Пожалуйста, предложите решение.

Программа возвращает такие метрики, как [Нет, потеря, точность].

import warnings
warnings.filterwarnings("ignore")
import tensorflow as tf
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import OneHotEncoder

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()


# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
train_images = train_images[:10000]
train_labels = train_labels[:10000]
train_images = train_images.reshape(-1,28,28,1)
train_labels = train_labels.reshape(-1,1)
test_images = test_images.reshape(-1,28,28,1)
test_labels = test_labels.reshape(-1,1)
train_images = train_images.astype('float32')
test_images = test_images.astype('float32')

one = OneHotEncoder()
ygold = one.fit_transform(train_labels).toarray()
ygold = tf.constant(ygold,dtype=tf.float32)
x = tf.constant(train_images,dtype=tf.float32)

w_conv1 = tf.Variable(tf.zeros(shape=[5,5,1,32]))
b_conv1 = tf.Variable(tf.zeros(shape=[32]))
convolve1 = tf.nn.conv2d(x,w_conv1,strides=[1,1,1,1],padding='SAME') + b_conv1
convolve1 = tf.nn.relu(convolve1)
convolve1 = tf.nn.max_pool(convolve1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

w_conv2 = tf.Variable(tf.zeros(shape=[5,5,32,64]))
b_conv2 = tf.Variable(tf.zeros(shape=[64]))
convolve2 = tf.nn.conv2d(convolve1,w_conv2,strides=[1,2,2,1],padding='SAME') + b_conv2
convolve2 = tf.nn.relu(convolve2)
convolve2 = tf.nn.max_pool(convolve2,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

fc_matrix = tf.reshape(convolve2,shape=[-1,4*4*64])

w_fc = tf.Variable(tf.zeros(dtype=tf.float32,shape=[1024,10]))
b_fc = tf.Variable(tf.zeros(dtype=tf.float32,shape=[10]))


hyp = tf.sigmoid(tf.matmul(fc_matrix,w_fc) + b_fc)
loss = tf.reduce_mean(-tf.reduce_sum(ygold * tf.log(hyp),reduction_indices=[1]))
trainm = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
cp = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(hyp,1),tf.argmax(ygold,1)),dtype=tf.float32))

sess = tf.Session()

init = tf.global_variables_initializer()
sess.run(init)
for i in range(100):
    print(sess.run([trainm,loss,cp]))

sess.close()
...