ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-09 22:35:09  阅读:307  来源: 互联网

标签:None TypeError Tensor dropout paddle num self pool


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

标签:None,TypeError,Tensor,dropout,paddle,num,self,pool
来源: https://blog.csdn.net/weixin_49099323/article/details/122400450

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有