首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用千层面和theano构建网络

使用千层面和theano构建网络
EN

Stack Overflow用户
提问于 2019-10-23 19:02:51
回答 1查看 29关注 0票数 0

我正在尝试构建网络,但收到以下错误

这是构建和训练代码

网络是由下面的视频code构建的

我使用此存储库githup repository创建的数据

训练包含24类图像,测试包含24类标签

代码语言:javascript
复制
import os
import numpy as np
import lasagne
import theano
import theano.tensor as T


def load_mnist_images(filename):
    with gzip.open(filename,'rb') as f :
        data = np.frombuffer(f.read(),np.uint8,offset=16)
        data = data.reshape(-1,1,28,28)
        print(type(data))
        return data/np.float32(256)

def load_mnist_labels(filename):
    with gzip.open(filename,'rb')as f:
        data=np.frombuffer(f.read(),np.uint8,offset=8)
        return data

def load_dataset():
    x_train = load_mnist_images('train-images-idx3-ubyte.gz')
    y_train = load_mnist_labels('train-labels-idx1-ubyte.gz')
    x_test = load_mnist_images('test-images-idx3-ubyte.gz')
    y_test = load_mnist_labels('test-labels-idx1-ubyte.gz')

    return x_train,y_train,x_test,y_test

def build_nn(input_var=None):

    l_in = lasagne.layers.InputLayer(shape=(None,1,28,28),input_var=input_var)

    l_in_drop = lasagne.layers.DropoutLayer(l_in,p=0.2)

    l_hid1 = lasagne.layers.DenseLayer(l_in_drop,num_units=800,
                                       nonlinearity=lasagne.nonlinearities.rectify,
                                       W=lasagne.init.GlorotUniform())

    l_hid1_drop = lasagne.layers.DropoutLayer(l_hid1,p=0.5)

    l_hid2 = lasagne.layers.DenseLayer(l_hid1_drop, num_units=800,
                                       nonlinearity=lasagne.nonlinearities.rectify,
                                       W=lasagne.init.GlorotUniform())

    l_hid2_drop = lasagne.layers.DropoutLayer(l_hid2, p=0.5)

    l_out = lasagne.layers.DenseLayer(l_hid2_drop,num_units=24 ,
                                      nonlinearity= lasagne.nonlinearities.softmax)

    return l_out
if __name__ == "__main__":
    x_train,y_train,x_test,y_test = load_dataset()

    input_var = T.tensor4('inputs')
    target_var = T.tensor4('targets')
    print(target_var)
    network = build_nn(input_var)

    prediction = lasagne.layers.get_output(network)

    loss = lasagne.objectives.categorical_crossentropy(prediction,target_var)

    loss = loss.mean()

    params = lasagne.layers.get_all_params(network, trainable=True)

    updates = lasagne.updates.nesterov_momentum(loss,params,learning_rate=0.01 , momentum=0.9)

    train_fn = theano.function([input_var,target_var],loss , updates=updates)

    num_training_steps = 10

    for steps in range(num_training_steps):
        train_err = train_fn(x_train,y_train)
        print("current step is " + str(steps))

这是我得到的错误

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/hassan/JPG-PNG-to-MNIST-NN-Format/mnist_test.py", line 64, in <module>
    loss = lasagne.objectives.categorical_crossentropy(prediction,target_var)
  File "/home/hassan/anaconda3/envs/object-detection/lib/python3.7/site-packages/lasagne/objectives.py", line 181, in categorical_crossentropy
    return theano.tensor.nnet.categorical_crossentropy(predictions, targets)
  File "/home/hassan/anaconda3/envs/object-detection/lib/python3.7/site-packages/theano/tensor/nnet/nnet.py", line 2101, in categorical_crossentropy
    raise TypeError('rank mismatch between coding and true distributions')
TypeError: rank mismatch between coding and true distributions
EN

回答 1

Stack Overflow用户

发布于 2019-10-23 19:50:42

我解决了这个问题,在编写te代码时出现了一个错误

与其写这篇文章,不如

代码语言:javascript
复制
target_var = T.ivector('targets')

我写了这个

代码语言:javascript
复制
target_var = T.tensor4('targets')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58521407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档