我想做同样的numpy操作如下,使一个自定义层
img=cv2.imread('img.jpg') # img.shape =>(600,600,3)
mask=np.random.randint(0,2,size=img.shape[:2],dtype='bool')
img2=np.expand_dims(img,axis=0) #img.shape => (1,600,600,3)
img2[:,mask,:].shape # => (1, 204030, 3)
这是我第一次尝试,但失败了。我不能对tensorflowTensor做同样的操作
class Sampling_layer(keras.layers.Layer):
def __init__(self,sampling_matrix):
super(Sampling_layer,self).__init__()
self.sampling_matrix=sampling_matrix
def call(self,input_img):
return input_img[:,self.sampling_matrix,:]
更多解释:
我想定义一个keras层,这样给定一批图像,它使用一个采样矩阵,并为图像提供一批采样向量。采样矩阵是一个随机布尔矩阵,大小与图像相同。我使用的切片操作对于numpy数组来说是直接的,并且工作得很好。但是我不能用tensorflow中的Tensor来完成。我尝试使用循环来手动执行我想要的操作,但失败了。
1条答案
按热度按时间qnyhuwrf1#
您可以执行以下操作。
请注意,您的图像和蒙版需要具有相同的批量大小。我无法找到一个解决方案,使这一工作,而不重复批量轴上的面具,以配合批量大小的图像。这是我想到的唯一可能的解决方案,(假设你的掩码对每批数据都有变化)。