DL4J中文文档/调优与训练/T-SNE可视化

T-SNE数据可视化

T-分布式随机相邻嵌入(T-SNE)是由Delft技术大学的Laurens van der Maaten创建的数据可视化工具。

虽然它可以用于任何数据,但是t-SNE(发音为Tee-Snee)只对标记数据有意义,这说明输入是如何聚类的。下面,你可以看到使用t-SNE处理MNIST数据在DL4J中生成的图形类型。

Alt text

仔细看,你可以看到数字聚集在它们相似的地方,旁边的点。
下面是T-SNE如何出现在DL4J中的代码。

public class TSNEStandardExample {

    private static Logger log = LoggerFactory.getLogger(TSNEStandardExample.class);

    public static void main(String[] args) throws Exception  {
        //第1步:初始化
        int iterations = 100;
        //create an n-dimensional array of doubles
        DataTypeUtil.setDTypeForContext(DataBuffer.Type.DOUBLE);
        List<String> cacheList = new ArrayList<>(); //cacheList is a dynamic array of strings used to hold all words

        //第2步:将文本输入转换成单词列表
        log.info("Load & Vectorize data....");
        File wordFile = new ClassPathResource("words.txt").getFile();   //打开文件
        //获取所有唯一词向量的数据
        Pair&lt;InMemoryLookupTable,VocabCache&gt; vectors = WordVectorSerializer.loadTxt(wordFile);
        VocabCache cache = vectors.getSecond();
        INDArray weights = vectors.getFirst().getSyn0();    //将独特词的权重分成自己的列表
        for(int i = 0; i &lt; cache.numWords(); i++)   //把字串分隔成自己的列表
            cacheList.add(cache.wordAtIndex(i));

        //第3步:构建双树TSNE以供以后使用
        log.info("Build model....");
        BarnesHutTsne tsne = new BarnesHutTsne.Builder()
                .setMaxIter(iterations).theta(0.5)
                .normalize(false)
                .learningRate(500)
                .useAdaGrad(false)
//                .usePca(false)
                .build();

        //第4步:建立TSNE值并将其保存到文件中
        log.info("Store TSNE Coordinates for Plotting....");
        String outputFile = "target/archive-tmp/tsne-standard-coords.csv";
        (new File(outputFile)).getParentFile().mkdirs();
        tsne.plot(weights,2,cacheList,outputFile);
      //这个tsne将使用向量的权重作为它的矩阵,具有两个维度,使用单词字符串作为标签,并将其写入在前一行创建的outputFile

    }



}

这里是使用gnuplot绘制的tsne-standard-coords.csv文件的图像。

Tsne data plot

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值