Я новичок в нейронных сетях и TensorFlow, я попробовал следующий код для классификации рукописных цифр (модель однослойного персептрона)
Я скачал набор данных из kaggle, который содержит первый столбец в качестве цифрыи следующие 784 столбца значения пикселей.
import tensorflow as tf
import numpy as np
import pandas as pd
from PIL import Image
tr = open("train.csv","r")
tr_cont=tr.read()
tr_cont=tr_cont.split("\n")
tr_cont = tr_cont[1:]
train_in=[]
train_out=[]
for inp in tr_cont:
data = inp.split(",")
num = [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0] #to identify the digit
num[int(data[0])] = 1 #data[0] is the digit label
train_out.append(num)
train_in.append(data[1:]) #these are the pixel values
x = tf.placeholder(tf.float32 , [None , 784])
y = tf.placeholder(tf.float32 , [None , 10])
w = tf.Variable(tf.random_normal([784,10])) #weights
b = tf.Variable(tf.random_normal([10])) #biases
output = tf.nn.relu(tf.add(tf.matmul(x,w),b))
loss = tf.reduce_sum(tf.square(output-y))
opt = tf.train.GradientDescentOptimizer(0.3)
train_m = opt.minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(100):
sess.run(train_m , {x : train_in , y : train_out})
cost = sess.run(loss,feed_dict={x : train_in , y : train_out})
print(i," ",cost)
Вывод всегда показывает:
0 42000.0
1 42000.0
2 42000.0
3 42000.0
4 42000.0
5 42000.0
6 42000.0
7 42000.0
8 42000.0
9 42000.0
10 42000.0
. ,,etc
Итак, я предполагаю, что нейронные сети не работают.
Я пробовал скорость обучения 0,01, 0,2, 0,3, но она показывает тот же результат.
Что здесь не так?
Нужно ли добавлять скрытые слои?
РЕДАКТИРОВАТЬ: Я также пытался получить вывод для тестовых образцов. Он показывает одинаковый вывод для каждого тестового образца:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]