Я хочу тренировать модель в Fashion mnist, но веса не обновляются, но когда я проверяю вес, я обнаружил, что они не обновляются. Я не знаю, почему
import tensorflow as tf
import os
import _pickle as cPickle
import numpy as np
from keras.datasets import fashion_mnist
(train_data, train_labels), (test_data, test_labels) = fashion_mnist.load_data()
train_data = train_data/255.0
test_data = test_data/255.0
tf.reset_default_graph()
X = tf.placeholder(tf.float32, shape=(None, 28, 28))
y = tf.placeholder(tf.int64, shape=(None,))
dataset = tf.data.Dataset.from_tensor_slices((X, y))
batch_size = 256
dataset = dataset.shuffle(2).batch(batch_size).repeat()
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()
W_1 = tf.Variable(np.random.normal(0, 0.01, (784, 256)), name='W_1', dtype=tf.float32)
b_1 = tf.Variable(np.zeros(shape=[256]), name='b_1', dtype=tf.float32)
W_2 = tf.Variable(np.random.normal(0, 0.01, (256, 10)), name='W_2', dtype=tf.float32)
b_2 = tf.Variable(np.zeros(shape=[10]), name='b_2', dtype=tf.float32)
H = tf.nn.relu(tf.matmul(tf.reshape(X, (-1, 784)), W_1) + b_1)
O = tf.matmul(H, W_2) + b_2
output = tf.nn.softmax(O)
predict = tf.argmax(output, 1)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predict, y), tf.float64))
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=output))
optimizer = tf.train.AdamOptimizer(0.5).minimize(loss)
init = tf.global_variables_initializer()
num_epochs = 1
steps_per_epoch = train_data.shape[0] // batch_size + 1
train_loss, train_acc, n = 0.0, 0.0, 0
with tf.Session() as sess:
sess.run(init)
sess.run(iterator.initializer, feed_dict={X:train_data, y:train_labels})
for step in range(num_epochs * steps_per_epoch):
x_batch, y_batch = sess.run(next_element)
_, l, acc = sess.run([optimizer, loss, accuracy], feed_dict={X:x_batch, y:y_batch})
train_loss += l
train_acc += acc
n += x_batch.shape[0]
print(sess.run(W_1)[0][:4])
if ((step + 1) % 10 == 0) and not (step == 0):
test_acc, test_pre = sess.run([accuracy, predict], feed_dict={X:test_data, y:test_labels})
train_acc, train_pre = sess.run([accuracy, predict], feed_dict={X:train_data, y:train_labels})
test_pre_pre = test_pre
train_pre_pre = train_pre
print('epoch{:d}:loss {:.4f} train_acc {:.4f} test_acc {:.4f}'.format((step + 1)//steps_per_epoch, l, acc, test_acc))
код напечатан ниже и не изменяется: [0,00772863 0,0250773 -0,00857907 -0,00014446]