in tensorflow/src/main/scala/com/spotify/featran/tensorflow/package.scala [27:67]
implicit def tensorFlowFeatureBuilder: FeatureBuilder[tf.Example] = TensorFlowFeatureBuilder()
implicit val exampleFlatReader: FlatReader[tf.Example] = new FlatReader[tf.Example] {
import TensorFlowType._
def readDouble(name: String): Example => Option[Double] =
(ex: Example) => toFeature(name, ex).flatMap(v => toDoubles(v).headOption)
def readMdlRecord(name: String): Example => Option[MDLRecord[String]] =
(ex: Example) => {
for {
labelFeature <- toFeature(name + "_label", ex)
label <- toStrings(labelFeature).headOption
valueFeature <- toFeature(name + "_value", ex)
value <- toDoubles(valueFeature).headOption
} yield MDLRecord(label, value)
}
def readWeightedLabel(name: String): Example => Option[List[WeightedLabel]] =
(ex: Example) => {
val labels = for {
keyFeature <- toFeature(name + "_key", ex).toList
key <- toStrings(keyFeature)
valueFeature <- toFeature(name + "_value", ex).toList
value <- toDoubles(valueFeature)
} yield WeightedLabel(key, value)
if (labels.isEmpty) None else Some(labels)
}
def readDoubles(name: String): Example => Option[Seq[Double]] =
(ex: Example) => toFeature(name, ex).map(v => toDoubles(v))
def readDoubleArray(name: String): Example => Option[Array[Double]] =
(ex: Example) => toFeature(name, ex).map(v => toDoubles(v).toArray)
def readString(name: String): Example => Option[String] =
(ex: Example) => toFeature(name, ex).flatMap(v => toStrings(v).headOption)
def readStrings(name: String): Example => Option[Seq[String]] =
(ex: Example) => toFeature(name, ex).map(v => toStrings(v))
}