x=tf.placeholder(tf.float32,[None,784],name='x_input')
y_=tf.placeholder(tf.float32,[None,10],name='y_input')
w1=tf.Variable(tf.random_normal([784,100],stddev=1,seed=1))
b1=tf.Variable(tf.random_normal([100],stddev=1))
w2=tf.Variable(tf.random_normal([100,10],stddev=1,seed=2))
b2=tf.Variable(tf.random_normal([10],stddev=1))
middle_y=tf.nn.relu(tf.matmul(x,w1)+b1)
y=tf.matmul(middle_y,w2)+b2
#定义损失函数
#1.神经网络输出值需要怎么处理?
#cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,)))
cross_entropy=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
#计算在当前batch中所有样例的交叉熵平均值
cross_entropy_mean=tf.reduce_mean(cross_entropy)
#计算正则化损失函数
REGULARIZATION_RATE=0.0001
regularizer=tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)
regularization=regularizer(w1)+regularizer(w2)
#总损失等于交叉熵损失和正则化损失之和
loss=cross_entropy_mean+regularization
train_step=tf.train.AdamOptimizer(0.001).minimize(loss)
#创建会话执行图
with tf.Session() as sess:
init=tf.global_variables_initializer()
sess.run(init)
#经过i轮迭代
STEPS=30000
#BATCH_SIZE=100
for i in range(STEPS):
batch_size = 100
xs, ys = mnist.train.next_batch(batch_size) # 从train的集合中选取batch_size个训练数据。
print ("X shape:", xs.shape)
print ("Y shape:", ys.shape)
result=sess.run(train_step,feed_dict={x:xs,y:ys})
if i%1000==0:
print("After %d training steps,tvalidation accuracy using average model is %g "%(STEPS,result))
数据维度没错,为什么会出现上面的错误? |