我正在尝试建立下图所示的模型。想法是采用多个分类特征(单热矢量)并将其分别嵌入,然后将这些嵌入的矢量与3D张量组合以用于LSTM。
使用Keras2.0.2中的以下代码,在创建Model()具有多个输入的对象时,会引发AttributeError: 'NoneType' object has no attribute 'inbound_nodes'类似于此问题的问题。谁能帮助我找出问题所在?
模型:
码:
from keras.layers import Dense, LSTM, Input
from keras.layers.merge import concatenate
from keras import backend as K
from keras.models import Model
cat_feats_dims = [315, 14] # Dimensions of the cat_feats
emd_inputs = [Input(shape=(in_size,)) for in_size in cat_feats_dims]
emd_out = concatenate([Dense(20, use_bias=False)(inp) for inp in emd_inputs])
emd_out_3d = K.repeat(emd_out, 10)
lstm_input = Input(shape=(10,5))
merged = concatenate([emd_out_3d,lstm_input])
lstm_output = LSTM(32)(merged)
dense_output = Dense(1, activation='linear')(lstm_output)
model …Run Code Online (Sandbox Code Playgroud) 我一直在阅读一些带有深度学习论文的NLP,并发现微调似乎是一个简单但却令人困惑的概念.这里提出了同样的问题,但仍然不太清楚.
如Y. Kim,"用于句子分类的卷积神经网络"和KS Tai,R.Socher,以及CD Manning,"改进树的语义表示"等论文所述,将预训练的单词嵌入微调到特定于任务的单词嵌入.- 结构化的长期短期记忆网络,"只是简单地提一下,没有详细说明.
我的问题是:
使用word2vec或Glove生成的Word嵌入作为预训练的单词向量用作(X)下游任务的输入要素,如解析或情感分析,这意味着那些输入向量插入到某个特定任务的新神经网络模型中,同时训练这个新模型,不知何故我们可以获得更新的特定于任务的单词嵌入.
但据我所知,在训练过程中,反向传播的作用是更新(W)模型的权重,它不会改变输入特征(X),那么原始单词嵌入的精确程度如何?这些微调的载体来自哪里?
在numpy可以乘以一个三维阵列作为例子下面的2D阵列:
>>> X = np.random.randn(3,5,4) # [3,5,4]
... W = np.random.randn(5,5) # [5,5]
... out = np.matmul(W, X) # [3,5,4]
Run Code Online (Sandbox Code Playgroud)
从我的理解,np.matmul()需要W和沿的第一维播放它X。但在tensorflow它是不允许的:
>>> _X = tf.constant(X)
... _W = tf.constant(W)
... _out = tf.matmul(_W, _X)
ValueError: Shape must be rank 2 but is rank 3 for 'MatMul_1' (op: 'MatMul') with input shapes: [5,5], [3,5,4].
Run Code Online (Sandbox Code Playgroud)
那么,有没有什么等效np.matmul()上面呢tensorflow?tensorflow将 2d 张量与 3d 张量相乘的最佳实践是什么?
我有两个向量如下:
p = zeros(5,1);
hx = [0.1; 0.3; 0.7; 0.9; 0.2];
Run Code Online (Sandbox Code Playgroud)
任务是将pfrom 0中的1元素替换为if中的元素hx >=0.5.成果输出:
p =
0
0
1
1
0
Run Code Online (Sandbox Code Playgroud)
它可以通过下面的代码来实现,我不明白的是:作为pos = find(hx >= 0.5);2D矢量,如何理解p(pos,1)=1;?最后一行代码如何知道哪个索引p对应于正确的元素pos?这两者之间似乎没有明显的联系.另一方面,如何通过for循环和if语句来完成?
pos = find(hx >= 0.5);
p(pos,1)=1;
Run Code Online (Sandbox Code Playgroud) 在xgboost.XGBRegressor似乎产生尽管新的随机种子被赋予了相同的结果.
根据xgboost文件xgboost.XGBRegressor:
seed:int随机数种子.(已弃用,请使用random_state)
random_state:int随机数种子.(取代种子)
random_state是要使用的一个,但是,不管是什么random_state或者seed我用的,该模型产生相同的结果.一个Bug?
from xgboost import XGBRegressor
from sklearn.datasets import load_boston
import numpy as np
from itertools import product
def xgb_train_predict(random_state=0, seed=None):
X, y = load_boston(return_X_y=True)
xgb = XGBRegressor(random_state=random_state, seed=seed)
xgb.fit(X, y)
y_ = xgb.predict(X)
return y_
check = xgb_train_predict()
random_state = [1, 42, 58, 69, 72]
seed = [None, 2, 24, 85, 96]
for r, s in product(random_state, seed):
y_ = xgb_train_predict(r, s)
assert np.equal(y_, check).all() …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种解决方案,根据列表作为值搜索字典中的键,然后将键附加到元组列表.我能够搜索正确的密钥但无法找到构建我期望的列表的方法.感谢善意的帮助.
如下所示,我想找到d其中值等于列表中元素的l所有键,并进一步将所有搜索到的键放入元组列表中,如预期输出中所示.
d = {'acutrar': 'acutrar',
'aguosa': 'aguoso',
'capitalizareis': 'capitalizar',
'conocerán': 'conocer',
'conociéremos': 'conocer',
'conocían': 'conocer',
'conocías': 'conocer',
'conozcas': 'conocer',
'pales': 'palar',
'planeareis': 'planear',
'planearás': 'planear',
'planeasteis': 'planear',
'planeáramos': 'planear'}
l = ['conocer', 'NOT FOUND', 'NOT FOUND', 'planear']
for word in l:
for (x,y) in d.items():
if y == word:
print(word, x) #I can only search for the keys but don't know how to build that list of tuples
Run Code Online (Sandbox Code Playgroud)
预期产出:
[('conocerán','conocías','conozcas','conocían','conociéremos'),('NOT FOUND'),('NOT FOUND'),('planeáramos','planeareis','planearás','planeasteis')]
Run Code Online (Sandbox Code Playgroud) python ×3
dictionary ×1
keras ×1
keras-2 ×1
list ×1
matlab ×1
octave ×1
python-3.x ×1
tensorflow ×1
tuples ×1
xgboost ×1