要處理神經網絡中的分類值,您必須在OneHot表示中表示它們。如果它們是字符串(因爲它似乎是你的情況),你首先必須將它們轉換爲「整數表示」。一步一步:
使用from sklearn.preprocessing import LabelEncoder,OneHotEncoder
定義您範疇字符串值
categorical_values = np.array([['Foo','bar','values'],['more','foo','bar'],['many','foo','bar']])
然後對其進行編碼爲整數:
categorical_values[:,0] = LabelEncoder().fit_transform(categorical_values[:,0])
categorical_values[:,1] = LabelEncoder().fit_transform(categorical_values[:,1])
categorical_values[:,2] = LabelEncoder().fit_transform(categorical_values[:,2])
並使用OneHotEncoder
獲得OneHot表示:
oneHot_values = OneHotEncoder().fit_transform(categorical_values).toarray()
定義您的圖表:
x_categorical = tf.placeholder(shape=[NUM_OBSERVATIONS,NUM_FEATURES],dtype=tf.float32)
weights = tf.Variable(tf.truncated_normal([NUM_FEATURES,NUM_CLASSES]),dtype=tf.float32)
bias = tf.Variable([NUM_CLASSES],dtype=tf.float32)
l2 = tf.add(tf.matmul(x_categorical,weights),bias)
並執行它獲得的結果:
with tf.Session() as sess:
tf.global_variables_initializer().run()
_l2 = sess.run(l2,feed_dict={x_categorical : oneHot_values})
編輯:按照要求,無sklearn版本。使用
只是numpy.unique()
和tensorflow.one_hot()
categorical_values = np.array(['Foo','bar','values']) #For one observation
lookup, labeledValues = np.unique(categorical_values, return_inverse=True)
oneHotValues = tf.one_hot(labeledValues,depth=NUM_FEATURES)
完整的示例在JN下鏈接
這裏有一個Jupyter筆記本採用的代碼我Github
類似功能的張量流可用?我不想使用sklearn。 –
@DilpreetSDhamija剛剛更新了答案,但是,我可以問你爲什麼不想使用sklearn但是tensorflow是嗎?只是好奇。 – Alber8295