【 百度 paddlepaddle 使用dropout 时】出现 :TypeError: ‘Tensor‘ object is not callable

2022/1/9 23:05:12

本文主要是介绍【 百度 paddlepaddle 使用dropout 时】出现 :TypeError: ‘Tensor‘ object is not callable,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

import paddle
import numpy as np

x = np.array([[1,2,3], [4,5,6]]).astype('float32')
x = paddle.to_tensor(x)

#######################
p =paddle.nn.functional.dropout(x) 
y_train=p(x)# 这种方式报错!
###############################

y_train = paddle.nn.functional.dropout(x, 0.5) ###这是正确的使用方式

print(x)
print(y_train)

print(x)
print("经过drop_out 的数据",y_train)


由于才学习python 和百度paddlepaddle框架,我觉得这个错误的原因是,平时定义卷积神经网络的方式是引用Conv2D等类,然后实例化。这个paddle.nn.functional.dropout()是不是只是个函数?
乱猜的,反正要添加Drop_out层,直接调用这个函数就完了。别再像下面的代码那样错误操作了。

#定义CNN网络
错误的操作示范!(复制代码记得将这行注释掉)
class MyCNN(fluid.dygraph.Layer):
    def __init__(self):
        super(MyCNN,self).__init__()
        #self.conv0 = Conv2D(num_channels=3, num_filters=20, filter_size=5, padding=0, act='relu') #输入32*32 输出32-5+1=28*28
        #self._batch_norm_0 = BatchNorm(num_channels = 20 , act = None)  
        #self.pool0 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')   #输入28*28 输出(28-2)/2+1=14*14
        
        #----------------------错误的操作示范------------------------
        self.dropout_0=paddle.nn.functional.dropout(x, p=0.5, axis=None, training=True, mode="downscale_in_infer", name=None)
        #-----------------------------------------------------------------------
        #self.conv1 = Conv2D(num_channels=20, num_filters=50, filter_size=5, padding=0, act='relu') #输入14*14 输出(14-5)+1=10*10
        #self.pool1 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')                          #输入10*10 输出(10-2)/2+1=5*5
        #self._batch_norm_1 = BatchNorm(num_channels = 50 , act = None)    
        
		#错误的操作示范 
        self.dropout_1=paddle.nn.functional.dropout(x, p=0.5, axis=None, training=True, mode="downscale_in_infer", name=None)

        #self.conv2 = Conv2D(num_channels=50, num_filters=50, filter_size=5, padding=0, act='relu') #输入5*5 输出5-5+1=1*1
        #self.pool2 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')   #输入1*1 输出1*1 (1-2)/2+1=(-0.5)*(-0.5)
        
		#错误的操作示范
        self.dropout_2=paddle.nn.functional.dropout(x, p=0.5, axis=None, training=True, mode="downscale_in_infer", name=None)
        
        #self.fc1 = Linear(input_dim=50, output_dim=10,act="softmax")       #输入50*1,输出10*1
        

    def forward(self,input):
        x = self.conv0(input)        #卷积,
        x = self.pool0(x)            #池化
        x = self._batch_norm_0(x)    #批归一化
        x = self.dropout_0(x)        #错误的操作示范
        
        

        x = self.conv1(x)
        x = self.pool1(x)
        x = self._batch_norm_1(x)
        x = self.dropout_1(x)      #错误的操作示范
        

        x = self.conv2(x)
        x = self.pool2(x)
        x = fluid.layers.reshape(x, [x.shape[0], -1])
        x = self.dropout_2(x)   #错误的操作示范
        y = self.fc1(x)
        return y

错误信息如下:

训练开始时间: 2022-01-09 22:04:00
learning-rate: 0.001
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)/tmp/ipykernel_97/3922009731.py in <module>
     39             image=fluid.dygraph.to_variable(images)          ######fluid.dygraph.to_variable(images)
     40             label=fluid.dygraph.to_variable(labels)
---> 41             predict=model(image)#预测
     42             #print(predict)
     43             loss=fluid.layers.cross_entropy(predict,label)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py in __call__(self, *inputs, **kwargs)
/tmp/ipykernel_97/2768139255.py in forward(self, input)
     22         x = self.conv0(input)        #卷积,
     23         x = self.pool0(x)            #池化
---> 24         x1 = self.drop0(x)
     25         x1 = self._batch_norm_0(x1)    #批归一化
     26 
TypeError: 'Tensor' object is not callable


这篇关于【 百度 paddlepaddle 使用dropout 时】出现 :TypeError: ‘Tensor‘ object is not callable的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程