我想在我的神经网络中实现一个自定义层(https://alternativeai.blogspot.com/2020/03/dynamic-weight-matrix-neural-network.html进行更深入的说明),该层将上一层的激活作为输入“调整”加权连接的路由,然后找到输入的点积与调整后的权重矩阵相加,加上偏差和激活函数,然后将结果向前发送。
将发生的事情是,加权连接不是由其连接性或ith,jth格式定义的。来自第i个神经元的加权连接将始终与第i个神经元相关联。但是j定义为第i个神经元的输入所具有的特定小数位。因此,将有一个ith / tens加权连接,一个ith / 100的连接和一个ith /十分之一的连接。
这将确定其路由,因为在输出层中将恰好有10个神经元。代表数字0到9。
如果第i个神经元的输入是8.27301 ...,那么ith / tens加权连接将连接到代表十进制数8的输出层中的神经元,因为那是十位的数字。 / p>
类似地,第ith /十分之一加权连接将连接到代表数字2的输出层中的神经元。
ith / hundreths => 7个神经元 ith / thousandths => 3 ....
以此类推
我在喀拉拉邦实现了一个自定义层,在其中创建了模板权重矩阵W2,我再次对其进行了重新保存以反映对路由W所做的调整。 我的输入张量是(9000,100,100,1)。我尝试使用eval()将其转换为numpy数组,以便我可以检索每个数字中每个位置的数字值,但出现错误。
这是我的代码:
class MyLayer(Layer):
global Input_tensor
def __init__(self, output_dim=100, **kwargs):
self.output_dim = output_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
input_dim = input_shape[1]
self.W2 = K.random_normal((input_dim,100))
self.trainable_weights = [self.W2]
def call(self, x):
self.W = topology(x, self.W2)
return K.dot(x, self.W)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
def topology(input_tensor, W2):
count_t = -1
count_c = -1
SW = np.random.rand(10000,100)
with tf.compat.v1.Session() as sess:
sess.run(tf.compat.v1.global_variables_initializer())
x_unpacked = input_tensor.eval()
print(x_unpacked.shape)
for t in x_unpacked:
tf.strings.as_string(t)
e=tf.unstack(tf.reshape(t,[-1]))
count_t += 1
for c in e:
count_c += 1
i=0
c=tf.dtypes.cast(c, tf.int32)
for v in range(10):
W2=W2.numpy()
print(W2.shape)
SW[count_t: count_c + i*v,:] = W2[count_t:c +i*v,:]
i += 10
SW = tf.convert_to_tensor(SW)
return SW
我得到的错误如下:
回溯(最近通话最近):
_do_call中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”,行1367
返回fn(* args)
_run_fn中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”,行1352
target_list,run_metadata)
在_call_tf_sessionrun中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”第1445行
run_metadata)
tensorflow.python.framework.errors_impl.InvalidArgumentError:您必须使用dtype float和shape [?,10输入占位符张量'input_1'的值
0,100,1]
[[{{node input_1}}]]
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近):
中的文件“ finalvideo_2.py”,第630行
text()
文件“ finalvideo_2.py”,第498行,为文本
kikiE(EX_dat,EY_dat)
在kikiE中的文件“ finalvideo_2.py”(第338行)
x = MyLayer()(输入张量)
在symbolic_fn_wrapper中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py”,第73行,
return func(* args,** kwargs)
调用
中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/engine/base_layer.py”,第489行
输出= self.call(输入,** kwargs)
通话中的文件“ finalvideo_2.py”,第108行,
self.W =拓扑结构(x,self.W2)
拓扑中的文件“ finalvideo_2.py”,第128行,
x_unpacked = input_tensor.eval()
在eval中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py”,行790
返回_eval_using_default_session(self,feed_dict,self.graph,session)
_eval_using_default_session中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py”,第5312行
返回session.run(张量,feed_dict)
在运行中,文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”,第960行
run_metadata_ptr)
文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”,行1183,在_run
feed_dict_tensor,选项,run_metadata)
_do_run中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”,行1361
run_metadata)
_do_call中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/client/session.py”,行1386
提高类型(e)(node_def,op,消息)
tensorflow.python.framework.errors_impl.InvalidArgumentError:您必须使用dtype float和shape [?,10来输入占位符张量'input_1'的值
0,100,1]
[[节点输入_1(在/home/usergpu/venv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:676中定义)]]
“ input_1”的原始堆栈跟踪:
中的文件“ finalvideo_2.py”,第630行
text()
文件“ finalvideo_2.py”,第498行,为文本
kikiE(EX_dat,EY_dat)
在kikiE中,文件“ finalvideo_2.py”,第333行,
input_tensor = Input(shape = X_D [0] .shape)
输入文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/engine/input_layer.py”,第178行,
input_tensor = tensor)
包装中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/legacy/interfaces.py”,第91行,
return func(* args,** kwargs)
init
中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/engine/input_layer.py”,第87行
name = self.name)
在symbolic_fn_wrapper中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py”,第73行,
return func(* args,** kwargs)
在占位符中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py”,行676
shape = shape,ndim = ndim,dtype = dtype,sparse =稀疏,name = name)
在占位符中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/keras/backend.py”,行1054
x = array_ops.placeholder(dtype,shape = shape,name = name)
在占位符上的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/ops/array_ops.py”,行2718
返回gen_array_ops.placeholder(dtype = dtype,shape = shape,name = name)
文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/ops/gen_array_ops.py”,第6032行,位于占位符
“占位符”,dtype = dtype,shape = shape,name = name)
_apply_op_helper中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/framework/op_def_library.py”,第742行
attrs = attr_protos,op_def = op_def)
_create_op_internal
中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/framework/func_graph.py”,第595行
compute_device)
_create_op_internal中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py”,行3322
op_def = op_def)
init
中的文件“ /home/usergpu/venv/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py”,行1756
self._traceback = tf_stack.extract_stack()
任何帮助将不胜感激。