首页 新闻 会员 周边 捐助

TensorFlow使用占位符,测试网络过程中出现以下错误,应该怎么修改

0
悬赏园豆:50 [待解决问题]

ValueError: Dimension size must be evenly divisible by 160000 but is 4096 for 'optimizer/gradients/local3/Reshape_grad/Reshape' (op: 'Reshape') with input shapes: [64,64], [4] and with input tensors computed as partial shapes: input[1] = [?,100,100,16].
我的全部代码如下:

import tensorflow as tf
from time import sleep

def inference(images, batch_size, n_classes):
with tf.variable_scope('conv1') as scope:
# 卷积盒的为 3*3 的卷积盒,图片厚度是3,输出是16个featuremap
weights = tf.get_variable('weights',
shape=[3, 3, 3, 16],
dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
biases = tf.get_variable('biases',
shape=[16],
dtype=tf.float32,
initializer=tf.constant_initializer(0.1))
conv = tf.nn.conv2d(images, weights, strides=[1, 1, 1, 1], padding='SAME')
pre_activation = tf.nn.bias_add(conv, biases)
conv1 = tf.nn.relu(pre_activation, name=scope.name)
# print('conv1: ', conv1.shape)
# sleep(0.3)

with tf.variable_scope('pooling1_lrn') as scope:
    pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME', name='pooling1')
    norm1 = tf.nn.lrn(pool1, depth_radius=4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm1')
    # print('norm1: ', norm1.shape)
    # sleep(0.3)

with tf.variable_scope('conv2') as scope:
    weights = tf.get_variable('weights',
                              shape=[3, 3, 16, 16],
                              dtype=tf.float32,
                              initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
    biases = tf.get_variable('biases',
                             shape=[16],
                             dtype=tf.float32,
                             initializer=tf.constant_initializer(0.1))
    conv = tf.nn.conv2d(norm1, weights, strides=[1, 1, 1, 1], padding='SAME')
    pre_activation = tf.nn.bias_add(conv, biases)
    conv2 = tf.nn.relu(pre_activation, name='conv2')
    # print('conv2: ', conv2.shape)
    # sleep(0.3)

    # pool2 and norm2
with tf.variable_scope('pooling2_lrn') as scope:
    norm2 = tf.nn.lrn(conv2, depth_radius=4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm2')
    pool2 = tf.nn.max_pool(norm2, ksize=[1, 3, 3, 1], strides=[1, 1, 1, 1], padding='SAME', name='pooling2')
    # print('pool2: ', pool2.shape)
    # sleep(0.3)

with tf.variable_scope('local3') as scope:
    reshape = tf.reshape(pool2, shape=[batch_size, -1])
    # print('reshape: ', reshape.shape)
    # sleep(0.3)
    dim = reshape.get_shape()[1].value
    dim = batch_size
    # print('dim: ', dim)
    # sleep(0.3)
    weights = tf.get_variable('weights',
                              shape=[dim, 128],
                              dtype=tf.float32,
                              initializer=tf.truncated_normal_initializer(stddev=0.005, dtype=tf.float32))
    biases = tf.get_variable('biases',
                             shape=[128],
                             dtype=tf.float32,
                             initializer=tf.constant_initializer(0.1))
local3 = tf.nn.relu(tf.matmul(reshape, weights) + biases, name=scope.name)

# local4
with tf.variable_scope('local4') as scope:
    weights = tf.get_variable('weights',
                              shape=[128, 128],
                              dtype=tf.float32,
                              initializer=tf.truncated_normal_initializer(stddev=0.005, dtype=tf.float32))
    biases = tf.get_variable('biases',
                             shape=[128],
                             dtype=tf.float32,
                             initializer=tf.constant_initializer(0.1))
    local4 = tf.nn.relu(tf.matmul(local3, weights) + biases, name='local4')

    # softmax
with tf.variable_scope('softmax_linear') as scope:
    weights = tf.get_variable('softmax_linear',
                              shape=[128, n_classes],
                              dtype=tf.float32,
                              initializer=tf.truncated_normal_initializer(stddev=0.005, dtype=tf.float32))
    biases = tf.get_variable('biases',
                             shape=[n_classes],
                             dtype=tf.float32,
                             initializer=tf.constant_initializer(0.1))
    softmax_linear = tf.add(tf.matmul(local4, weights), biases, name='softmax_linear')

return softmax_linear

def losses(logits, labels):
with tf.variable_scope('loss') as scope:
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels, name='xentropy_per_example')
loss = tf.reduce_mean(cross_entropy, name='loss')
tf.summary.scalar(scope.name + '/loss', loss)
print('loss: ', loss.shape)
return loss

def trainning(loss, learning_rate):
with tf.name_scope('optimizer'):
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
global_step = tf.Variable(0, name='global_step', trainable=False)
train_op = optimizer.minimize(loss, global_step=global_step)
return train_op

def evaluation(logits, labels):
with tf.variable_scope('accuracy') as scope:
correct = tf.nn.in_top_k(logits, labels, 1)
correct = tf.cast(correct, tf.float16)
accuracy = tf.reduce_mean(correct)
tf.summary.scalar(scope.name + '/accuracy', accuracy)
return accuracy

if name == 'main':
x = tf.placeholder(dtype=tf.float32, shape=[None, 200, 200, 3], name='x')
y = tf.placeholder(dtype=tf.int32, shape=[64,], name='y')
logits = inference(x, batch_size=64, n_classes=2)
print(logits.shape)
print('y: ', y.shape)
loss = losses(logits, y)
train_op = trainning(loss, 0.0001)

正态分个布的主页 正态分个布 | 初学一级 | 园豆:97
提问于:2019-11-19 19:35
< >
分享
所有回答(1)
0

您好,我也遇到了这个问题,所以想问一下您这个问题解决了吗?如果已解决的话,是怎么解决的呢?

学术fw | 园豆:202 (菜鸟二级) | 2021-03-14 16:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册