【发布时间】:2021-07-14 03:28:15
【问题描述】:
from keras_multi_head import MultiHeadAttention
import keras
from keras.layers import Dense,Input,Multiply
from keras import backend as K
from keras.layers.core import Dropout, Layer
from keras.models import Sequential,Model
import numpy as np
import tensorflow as tf
from self_attention_layer import Encoder
## multi source attention
class Multi_source_attention(keras.Model):
def __init__(self,read_n,embed_dim,num_heads,ff_dim,num_layers):
super().__init__()
self.read_n = read_n
self.embed_dim = embed_dim
self.num_heads = num_heads
self.ff_dim = ff_dim
self.num_layers = num_layers
self.get_weights = Dense(49, activation = 'relu',name = "get_weights")
def compute_output_shape(self,input_shape):
#([batch,7,7,256],[1,256])
return input_shape
def call(self,inputs):
## weights matrix
#(1,49)
weights_res = self.get_weights(inputs[1])
#(1,7,7)
weights = tf.reshape(weights_res,(1,7,7))
#(256,7,7)
weights = tf.tile(weights,[256,1,1])
## img from mobilenet
img=tf.reshape(inputs[0],[-1,7,7])
inter_res = tf.multiply(img,weights)
inter_res = tf.reshape(inter_res, (-1,256,49))
print(inter_res.shape)
att = Encoder(self.embed_dim,self.num_heads,self.ff_dim,self.num_layers)(inter_res)
return att
我尝试构建一个网络来实现图像中圈出的部分。 LSTM **(1,256) 和之前 Mobilenet (batch,7,7,256) 的输出。然后将 LSTM 的输出转换为 (7,7) 形式的权重矩阵。
但问题是来自mobilenet的输出的输入形状有一个属性batch。我不知道如何处理 "batch" 或如何设置参数来约束批处理?
有人可以给我小费吗?
如果我删除函数 compute_output_shape(),则会出现一个错误 unimplementerror。 keras 官方文档告诉我,我不需要覆盖该函数。 有人可以解释一下吗?
【问题讨论】:
标签: python tensorflow keras keras-layer tf.keras