sparse_tensor_to_dense
전에 이어서…
각 행의 feature를 sparse tensor로 받아 들인다. tutorial에는 값을 확인하는 부분이 없다. 내가 입력한 값이 정확한지 이를 어떻게 확인해야 하는지? print로 확인을 하면 좋은데, sparse tensor를 print 하면 대략 형식에 대한 값들만 출력이 된다.
SparseTensor(indices=Tensor("SparseTensor_1/indices:0", shape=(32561, 2), dtype=int64), values=Tensor("SparseTensor_1/values:0", shape=(32561,), dtype=string), dense_shape=Tensor("SparseTensor_1/dense_shape:0", shape=(2,), dtype=int64))
크게 3개로 구성된다. 각 항목의 type은 tensor이다.
1. indeces에 대한 정의
2. values에 대한 정의
3. dense_shape에 대한 정의
sparse_tensor_to_dense 함수가 sparse tensor를 어떻게 되어있는지 출력한다. sparse_tensor_to_dense의 입력 파라미터로 1. sparse tensor 이름, 2.default_value를 받는다. feature column으로 만든 sparse tensor는 values에 대한 data type이 string, int64 등 여러 종류가 있다. 정의된 values가 int64인데 default_value를 string을 쓰면 에러가 난다. 그래서 각 sparse tensor의 values에 대한 항목을 뽑고, 다시 dtype을 뽑아내어 각 항목에 맞는 default_value를 넣어버렸다.
아래와 같이 구현했다.
with tf.Session() as sess: for i in feature: print i print feature[i] print feature[i].values.dtype if(tf.string == feature[i].values.dtype): print "type string" y_tensor = tf.sparse_tensor_to_dense(sp_input = feature[i], default_value='x') if(tf.int64 == feature[i].values.dtype): print "type int64" y_tensor = tf.sparse_tensor_to_dense(sp_input = feature[i], default_value=0) else : print "different" print y_tensor print y_tensor.eval()
이렇게 실행하면 아래의 결과를 얻는다.
gender SparseTensor(indices=Tensor("SparseTensor/indices:0", shape=(32561, 2), dtype=int64), values=Tensor("SparseTensor/values:0", shape=(32561,), dtype=string), dense_shape=Tensor("SparseTensor/dense_shape:0", shape=(2,), dtype=int64)) <dtype: 'string'> type string different Tensor("SparseToDense:0", shape=(32561, 1), dtype=string) [['Male'] ['Male'] ['Male'] ..., ['Female'] ['Male'] ['Female']] age SparseTensor(indices=Tensor("SparseTensor_3/indices:0", shape=(32561, 2), dtype=int64), values=Tensor("SparseTensor_3/values:0", shape=(32561,), dtype=int64), dense_shape=Tensor("SparseTensor_3/dense_shape:0", shape=(2,), dtype=int64)) <dtype: 'int64'> type int64 Tensor("SparseToDense_1:0", shape=(32561, 1), dtype=int64) [[39] [50] [38] ..., [58] [22] [52]] education SparseTensor(indices=Tensor("SparseTensor_1/indices:0", shape=(32561, 2), dtype=int64), values=Tensor("SparseTensor_1/values:0", shape=(32561,), dtype=string), dense_shape=Tensor("SparseTensor_1/dense_shape:0", shape=(2,), dtype=int64)) <dtype: 'string'> type string different Tensor("SparseToDense_2:0", shape=(32561, 1), dtype=string) [['Bachelors'] ['Bachelors'] ['HS-grad'] ..., ['HS-grad'] ['HS-grad'] ['HS-grad']] relationship SparseTensor(indices=Tensor("SparseTensor_2/indices:0", shape=(32561, 2), dtype=int64), values=Tensor("SparseTensor_2/values:0", shape=(32561,), dtype=string), dense_shape=Tensor("SparseTensor_2/dense_shape:0", shape=(2,), dtype=int64)) <dtype: 'string'> type string different Tensor("SparseToDense_3:0", shape=(32561, 1), dtype=string) [['Not-in-family'] ['Husband'] ['Not-in-family'] ..., ['Unmarried'] ['Own-child'] ['Wife']]