Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用CNN、tensorflow的CIFAR数据集的y_pred形状问题_Python_Tensorflow_Deep Learning_Conv Neural Network - Fatal编程技术网

Python 使用CNN、tensorflow的CIFAR数据集的y_pred形状问题

Python 使用CNN、tensorflow的CIFAR数据集的y_pred形状问题,python,tensorflow,deep-learning,conv-neural-network,Python,Tensorflow,Deep Learning,Conv Neural Network,数据来自CIFAR-10 我编写了以下代码 最初,该代码仅用于2个conv层和一个完全连接的层。 我又添加了一个conv层,带有128个4X4过滤器。 我定义了一个用于提取训练集批次的类。我使用的批量大小为100 但现在,当我试图找出我的y_pred时,它的形状变成了[200,10],而它本应该是[100,10],因为我的批大小本身是100,而不是200。 如果我要删除我添加的最后一个conv层,那么我的代码工作得非常好,但我不想这样做,请告诉我该怎么做 所以,请帮忙 def one_hot_e

数据来自CIFAR-10 我编写了以下代码 最初,该代码仅用于2个conv层和一个完全连接的层。 我又添加了一个conv层,带有128个4X4过滤器。 我定义了一个用于提取训练集批次的类。我使用的批量大小为100 但现在,当我试图找出我的y_pred时,它的形状变成了[200,10],而它本应该是[100,10],因为我的批大小本身是100,而不是200。 如果我要删除我添加的最后一个conv层,那么我的代码工作得非常好,但我不想这样做,请告诉我该怎么做 所以,请帮忙

def one_hot_encode(vec, vals = 10):
    n = len(vec)
    out = np.zeros((n,vals))
    out[range(n), vec] = 1
    return out


class CifarHelper():

    def __init__(self):
        self.i = 0

        self.all_train_batches = [data_batch1, data_batch2, data_batch3, data_batch4, data_batch5]
        self.test_batch = [test_batch]

        self.training_images = None
        self.training_labels = None

        self.test_images = None
        self.test_labels = None

    def set_up_images(self):

        print('setting up Training images and labels')

        self.training_images = np.vstack([d[b'data'] for d in self.all_train_batches])
        train_len = len(self.training_images)

        self.training_images = self.training_images.reshape(train_len, 3, 32, 32).transpose(0, 2, 3, 1)/255
        self.training_labels = one_hot_encode(np.hstack([d[b"labels"] for d in self.all_train_batches]))

        print('Setting up test images and labels')

        self.test_images = np.vstack([d[b'data'] for d in self.test_batch])
        test_len = len(self.test_images)

        self.test_images = self.test_images.reshape(test_len, 3, 32, 32).transpose(0, 2, 3, 1)/255
        self.test_labels = one_hot_encode(np.hstack([d[b"labels"] for d in self.test_batch]))

    def next_batch(self, batch_size):
        x = self.training_images[self.i:self.i+batch_size].reshape(batch_size, 32, 32, 3)
        y = self.training_labels[self.i:self.i+batch_size]
        self.i = (self.i + batch_size) % len(self.training_images)
        return x, y


ch = CifarHelper()
ch.set_up_images()


x = tf.placeholder(tf.float32, [None, 32, 32, 3])
y_true = tf.placeholder(tf.float32, [None, 10])
hold_prob = tf.placeholder(tf.float32)


def init_weights(shape):
    init_random_dist = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(init_random_dist)

def init_bais(shape):
    init_bais_vals = tf.constant(0.1, shape = shape)
    return tf.Variable(init_bais_vals)

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2by2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

def convolutional_layer(input_x, shape):
    W = init_weights(shape)
    b = init_bais([shape[3]])
    return tf.nn.relu(conv2d(input_x, W) + b)

def normal_full_layer(input_layer, size):
    input_size = int(input_layer.get_shape()[1])
    W = init_weights([input_size, size])
    b = init_bais([size])
    return tf.matmul(input_layer, W) + b


convo_1 = convolutional_layer(x, [4, 4, 3, 32])
convo_1_pooling = max_pool_2by2(convo_1)

convo_2 = convolutional_layer(convo_1_pooling, [4, 4, 32, 64])
convo_2_pooling = max_pool_2by2(convo_2)

convo_3 = convolutional_layer(convo_2_pooling, [4, 4, 64, 128])
convo_3_pooling = max_pool_2by2(convo_3)

convo_3_flat = tf.reshape(convo_2_pooling, [-1, 4*4*128])

full_layer_one = tf.nn.relu(normal_full_layer(convo_3_flat, 1024))

full_one_dropout = tf.nn.dropout(full_layer_one, keep_prob = hold_prob)

y_pred = normal_full_layer(full_one_dropout, 10)


batch = ch.next_batch(100)
init = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init)
  a = sess.run(y_pred, feed_dict = {x:batch[0], y_true:batch[1], hold_prob:.5})
a.shape

y_pred的预期形状是[100,10],但实际上,它是[200,10]

我想在重塑层的过程中会遇到一个问题。
使用tf.layers.flatte,而不是制作自己的展平层。那就行了

我想在整平图层的过程中会遇到问题。 使用tf.layers.flatte,而不是制作自己的展平层。那就行了