2019/06/30 - 民主和专治

专治和民主,不应该是水火不容的,两者都应该在不同历史阶段,不同的国家进行相应的取舍,以达到当前有利的平衡。绝对的专治不好,可是绝对的民主就一定好吗?

人的意识和关键是如何产生的,如何保证每个人的观点是正确的,何况正确也是复杂的概念。如何保证的大多数人的意见一定是有利于国家或者人类群体的发展?人的观点和意见是可以被塑造的,比如被媒体。所以我认为无论专治还是民主,都应该是受限的。

2019/05/08 - 浙江省自然科学基金委员会账号及浙江省科技项目管理系统账号注册及登录

概述:申请【浙江省自然科学基金委员会】(http://www.zjnsf.gov.cn)的项目,如果之前有该网站的账号,请直接找到基金委网站登录窗口进行登录(http://www.zjnsf.gov.cn/login.aspx)。如果是基金委网站的新用户,无法直接在该网站进行注册,需要【浙江省政务服务网】(http://www.zjzwfw.gov.cn)注册账号,然后再去注册【浙江省科技项目管理系统】(https://pm.zjsti.gov.cn/lib/index.html),从该系统进行登录。分为以下步骤:

打开【浙江省政务服务网】,单击注册按钮,注册完成之后,再单击登录按钮

按照顺序找到省科技厅计划项目

新版

旧版

找到省级科技计划评审

备注 : 请选择标注7的【在线办理】链接来注册【浙江省科技项目管理系统】(https://pm.zjsti.gov.cn/lib/index.html)并登录。而不要选择标注6的【在线办理】,否则会直接跳到浙江省自然基金委主页。

据上述方法,注册【浙江省科技项目管理系统】并登录,从该系统同时可以进入【浙江省自然科学基金委员会网站】

备注 : 如果无法直接根据账号登录科技项目管理系统和基金委网站,那么从浙江省政务服务站,登录到项目管理系统,再进入基金委网站肯定是可以。

参考链接

2019/03/24 - 使用Accord.NET的SVM进行归类

楔子

贵金属纳米粒子独特的局域表面等离子体共振(LSPR)特性使其呈现丰富的颜色,并且其颜色会随着纳米粒子的形貌、周围电介质的变化而千变万化,因此,利用贵金属纳米粒子的颜色变化,实现对其他物质的检测成为可能。Ag纳米粒子和$\ce{Hg^2+}$发生共价置换反应,会导致其颜色的发生变化,从而可以根据Ag纳米粒子颜色的变化,实现对$\ce{Hg^2+}$的痕量检测。那么如何根据Ag纳米粒子既有的颜色变化,实现对$\ce{Hg^2+}$浓度的预测是一个比较好玩的事情。使用神经网络进行预测是其中比较比较方便的一个解决方案。

Accord.NET

Accord.NET是.NET的神经网络库(参考:https://github.com/accord-net/framework/wiki/Classification),可以非常方便的创建SVM并进行学习。本来我没有意愿搞这个,无奈机缘巧合搞了一天,哎,写程序真是非常劳累的事情。言归正传!

具体实现

  • 首先建立读取图片的函数
class FileTool
{

    public String RootPath = "";
    public List<String> FileNames;


    public FileTool(String rootPath = @"C:\Users\Xing\Documents\SVM\image")
    {
        RootPath = rootPath;
        GetFiles();
    }


    public void GetFiles()
    {
        DirectoryInfo root = new DirectoryInfo(RootPath);
        FileInfo[] files = root.GetFiles();
        FileNames = new List<string>(); 

        foreach (var file in files)
        {
            FileNames.Add(Path.Combine(RootPath, file.Name));
        }
    }


    public int[] GetClassfication()
    {
        int[] classfication = new int[FileNames.Count];
        for(int i=0; i< FileNames.Count; i++)
        {
            String baseName = Path.GetFileName(FileNames[i]);
            classfication[i] = int.Parse("" + baseName[0]) - 1;
        }

        return classfication;
    }
}

  • 使用图片的RGB和HSV特征对$\ce{Hg^2+}$的浓度进行预测,可以进行如下处理
double[][] inputs = new double[fileNames.Count][];
int[] outputs = ft.GetClassfication();

for(int m=0; m<fileNames.Count; m++)
{
    Console.WriteLine("Training {0}", m);
    Bitmap image = (Bitmap)Bitmap.FromFile(fileNames[m]);

    int width = image.Width;
    int height = image.Height;

    double RS = 0, GS = 0, BS = 0;
    double HS = 0, SS = 0, VS = 0;

    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            Color pixel = image.GetPixel(i, j);

            RS += pixel.R;
            GS += pixel.G;
            BS += pixel.B;

            HSVColor hSVColor = GetHSV(pixel);

            HS += hSVColor.Hue;
            SS += hSVColor.Saturation;
            VS += hSVColor.Value;
        }
    }

    double Rsi = Convert.ToInt32(RS / (width * height));
    double Gsi = Convert.ToInt32(GS / (width * height));
    double Bsi = Convert.ToInt32(BS / (width * height));
    double Hsi = Convert.ToInt32(HS / (width * height));
    double Ssi = Convert.ToInt32(SS / (width * height));
    double Vsi = Convert.ToInt32(VS / (width * height));

    inputs[m] = new double[] { Rsi, Gsi, Bsi, Hsi, Ssi, Vsi };
    //inputs[m] = new double[] { Hsi, Ssi, Vsi };
}

  • 然后使用SVM进行学习
public static void ChiSquare(double[][] inputs, int[] outputs)
{
    // Create the multi-class learning algorithm as one-vs-one with DTW:
    var teacher = new MulticlassSupportVectorLearning<ChiSquare, double[]>()
    {
        Learner = (p) => new SequentialMinimalOptimization<ChiSquare, double[]>()
        {
            Complexity = 100, // Create a hard SVM
        }
    };

    // Learn a multi-label SVM using the teacher
    var svm = teacher.Learn(inputs, outputs);

    // Get the predictions for the inputs
    int[] predicted = svm.Decide(inputs);

    double error = new ZeroOneLoss(outputs).Loss(predicted);

    //MessageBox.Show(inputs.ToString(CSharpMatrixFormatProvider.InvariantCulture));
    //Console.WriteLine(outputs.ToString(CSharpMatrixFormatProvider.InvariantCulture));
    Console.WriteLine(predicted.ToString(CSharpMatrixFormatProvider.InvariantCulture));
    Console.WriteLine(error.ToString(CSharpMatrixFormatProvider.InvariantCulture));
}

第一次进行玩耍,还有很多的参数不会调试,也许以后也不会玩了。