Skip to content

Commit a80e106

Browse files
committed
tf.cast
1 parent a2535e1 commit a80e106

File tree

2 files changed

+20
-21
lines changed

2 files changed

+20
-21
lines changed

python/deep_model.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,14 @@ def __init__(self, embedding_size, field_feature_dict, sparse_field, continuous_
2525
self.hidden_layer.append(int(i))
2626

2727
# sparse embedding and concat all field embedding
28-
def concat(self, fields, sparse_id, sparse_val):
28+
def concat(self, fields, sparse_ids, sparse_vals):
2929
emb = []
3030
for i, field_id in enumerate(fields):
3131
input_size = self.field_feature_dict.field2feanum[field_id] + 1
3232
with tf.variable_scope("emb_"+str(field_id)):
3333
embedding_variable = tf.Variable(tf.truncated_normal([input_size, self.embedding_size], stddev=0.05), name='emb' + str(field_id))
34-
embedding = tf.nn.embedding_lookup_sparse(embedding_variable, sparse_id[i], sparse_val[i], "mod", combiner="sum")
34+
embedding = tf.nn.embedding_lookup_sparse(embedding_variable, tf.cast(sparse_ids[i], tf.int32), sparse_vals[i], "mod", combiner="sum")
3535
emb.append(embedding)
36-
#tf.summary.histogram('emb_' + str(field_id), embedding_variable)
3736
self.embedding.append(embedding_variable)
3837

3938
return tf.concat(emb, 1, name='concat_embedding')

src/deep_model.cc

+18-18
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,14 @@ int main(int argc, char* argv[]) {
126126
// Setup inputs and outputs
127127
// input 9:283:1 6:384:1 152:384:1
128128
std::string libfm_data = "9:283:1 6:384:1 152:384:1";
129-
std::unordered_map<int32, std::unordered_map<int32, float> > instance;
129+
std::unordered_map<int64, std::unordered_map<int64, float> > instance;
130130
std::vector<std::string> features;
131131
util::split(libfm_data, ' ', features);
132132
for (std::string feature: features) {
133133
std::vector<std::string> tokens;
134134
util::split(feature, ':', tokens);
135-
int32 fieldid;
136-
int32 featureid;
135+
int64 fieldid;
136+
int64 featureid;
137137
float value;
138138
int i = 0;
139139
for (std::string token: tokens) {
@@ -147,7 +147,7 @@ int main(int argc, char* argv[]) {
147147
i++;
148148
}
149149
if (instance.find(fieldid) == instance.end()) {
150-
std::unordered_map<int32, float> f;
150+
std::unordered_map<int64, float> f;
151151
f[featureid] = value;
152152
instance[fieldid] = f;
153153
} else {
@@ -159,13 +159,13 @@ int main(int argc, char* argv[]) {
159159
std::vector<std::pair<std::string, Tensor> > inputs;
160160

161161
for (int i = 0; i < sparse_field.size(); i++) {
162-
uint32 fieldid = sparse_field[i];
163-
std::vector<int32> indice;
164-
std::vector<int32> fid_list;
162+
uint64 fieldid = sparse_field[i];
163+
std::vector<int64> indice;
164+
std::vector<int64> fid_list;
165165
std::vector<float> fval_list;
166166
if (instance.find(fieldid) != instance.end()) {
167167
int num = 0;
168-
for (std::unordered_map<int32, float>::const_iterator iter = instance[fieldid].begin();
168+
for (std::unordered_map<int64, float>::const_iterator iter = instance[fieldid].begin();
169169
iter != instance[fieldid].end(); iter++) {
170170
indice.push_back(0);
171171
indice.push_back(num++);
@@ -179,28 +179,28 @@ int main(int argc, char* argv[]) {
179179

180180
// input/sparse_id/index/Placeholder
181181
auto id_indice_tensor =
182-
test::AsTensor<int32>(indice, {static_cast<int32>(indice.size()/2), 2});
182+
test::AsTensor<int64>(indice, {static_cast<int64>(indice.size()/2), 2});
183183
inputs.push_back(std::pair<std::string, Tensor>("input/sparse_" + std::to_string(fieldid) +"/index/Placeholder", id_indice_tensor));
184184

185185
// input/sparse_id/id/Placeholder
186-
auto id_list_tensor = test::AsTensor<int32>(fid_list);
186+
auto id_list_tensor = test::AsTensor<int64>(fid_list);
187187
inputs.push_back(std::pair<std::string, Tensor>("input/sparse_" + std::to_string(fieldid) +"/id/Placeholder", id_list_tensor));
188188

189189
// input/sparse_id/shape/Placeholder not used. Why?
190-
auto id_tensor_shape = TensorShape({1, static_cast<int32>(fid_list.size())});
190+
auto id_tensor_shape = TensorShape({1, static_cast<int64>(fid_list.size())});
191191

192192
// input/sparse_id/value/Placeholder
193193
auto val_list_tensor = test::AsTensor<float>(fval_list);
194194
inputs.push_back(std::pair<std::string, Tensor>("input/sparse_" + std::to_string(fieldid) +"/value/Placeholder", val_list_tensor));
195195
}
196196
for (int i = 0; i < linear_field.size(); i++) {
197-
uint32 fieldid = linear_field[i];
198-
std::vector<int32> indice;
199-
std::vector<int32> fid_list;
197+
uint64 fieldid = linear_field[i];
198+
std::vector<int64> indice;
199+
std::vector<int64> fid_list;
200200
std::vector<float> fval_list;
201201
if (instance.find(fieldid) != instance.end()) {
202202
int num = 0;
203-
for (std::unordered_map<int32, float>::const_iterator iter = instance[fieldid].begin();
203+
for (std::unordered_map<int64, float>::const_iterator iter = instance[fieldid].begin();
204204
iter != instance[fieldid].end(); iter++) {
205205
indice.push_back(0);
206206
indice.push_back(num++);
@@ -214,15 +214,15 @@ int main(int argc, char* argv[]) {
214214

215215
// input/linear_id/index/Placeholder
216216
auto id_indice_tensor =
217-
test::AsTensor<int32>(indice, {static_cast<int32>(indice.size()/2), 2});
217+
test::AsTensor<int64>(indice, {static_cast<int64>(indice.size()/2), 2});
218218
inputs.push_back(std::pair<std::string, Tensor>("input/linear_" + std::to_string(fieldid) +"/index/Placeholder", id_indice_tensor));
219219

220220
// input/linear_id/id/Placeholder
221-
auto id_list_tensor = test::AsTensor<int32>(fid_list);
221+
auto id_list_tensor = test::AsTensor<int64>(fid_list);
222222
inputs.push_back(std::pair<std::string, Tensor>("input/linear_" + std::to_string(fieldid) +"/id/Placeholder", id_list_tensor));
223223

224224
// input/linear_id/shape/Placeholder not used. Why?
225-
auto id_tensor_shape = TensorShape({1, static_cast<int32>(fid_list.size())});
225+
auto id_tensor_shape = TensorShape({1, static_cast<int64>(fid_list.size())});
226226

227227
// input/linear_id/value/Placeholder
228228
auto val_list_tensor = test::AsTensor<float>(fval_list);

0 commit comments

Comments
 (0)