一段很优雅的Linq代码

来自MSDN

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {

        try
        {
            var files = from file in Directory.EnumerateFiles(@"c:/",
                            "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine("{0}/t{1}", f.File, f.Line);
            }
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 GAN(生成对抗网络)实现的 C# 代码示例: ```csharp using System; using System.Collections.Generic; using System.Linq; using MathNet.Numerics.LinearAlgebra; class GAN { private int inputSize; // 输入向量的大小 private int hiddenSize; // 隐藏层向量的大小 private int outputSize; // 输出向量的大小 private Matrix<double> weights1; // 第一层权重矩阵 private Matrix<double> weights2; // 第二层权重矩阵 private Matrix<double> biases1; // 第一层偏置向量 private Matrix<double> biases2; // 第二层偏置向量 private Random rand; // 随机数生成器 public GAN(int inputSize, int hiddenSize, int outputSize) { this.inputSize = inputSize; this.hiddenSize = hiddenSize; this.outputSize = outputSize; // 初始化权重矩阵和偏置向量 weights1 = Matrix<double>.Build.Random(hiddenSize, inputSize); weights2 = Matrix<double>.Build.Random(outputSize, hiddenSize); biases1 = Matrix<double>.Build.Random(hiddenSize, 1); biases2 = Matrix<double>.Build.Random(outputSize, 1); rand = new Random(); } // 训练模型 public void Train(List<Vector<double>> realData, int numEpochs, int batchSize, double learningRate) { for (int epoch = 0; epoch < numEpochs; epoch++) { // 训练生成器 for (int i = 0; i < batchSize; i++) { // 生成随机噪声向量 Vector<double> noise = GenerateNoise(); // 使用噪声向量生成假数据 Vector<double> fakeData = GenerateFakeData(noise); // 计算假数据的损失 double fakeLoss = CalculateLoss(fakeData, false); // 计算梯度并更新权重和偏置 UpdateWeightsAndBiases(fakeData, fakeLoss, learningRate); } // 训练判别器 for (int i = 0; i < batchSize; i++) { // 随机选择一条真实数据 Vector<double> realDatum = realData[rand.Next(realData.Count)]; // 计算真实数据的损失 double realLoss = CalculateLoss(realDatum, true); // 计算假数据的损失 Vector<double> noise = GenerateNoise(); Vector<double> fakeData = GenerateFakeData(noise); double fakeLoss = CalculateLoss(fakeData, false); // 计算梯度并更新权重和偏置 UpdateWeightsAndBiases(realDatum, realLoss, learningRate); UpdateWeightsAndBiases(fakeData, fakeLoss, learningRate); } } } // 生成随机噪声向量 private Vector<double> GenerateNoise() { return Vector<double>.Build.Random(inputSize, 1); } // 使用噪声向量生成假数据 private Vector<double> GenerateFakeData(Vector<double> noise) { Vector<double> hidden = weights1 * noise + biases1; hidden = hidden.Map(x => Math.Tanh(x)); Vector<double> output = weights2 * hidden + biases2; output = output.Map(x => Math.Tanh(x)); return output; } // 计算损失 private double CalculateLoss(Vector<double> datum, bool isReal) { double target = isReal ? 1.0 : -1.0; double output = weights2 * (weights1 * datum + biases1) + biases2; return Math.Pow(output - target, 2); } // 计算梯度并更新权重和偏置 private void UpdateWeightsAndBiases(Vector<double> datum, double loss, double learningRate) { Vector<double> hidden = weights1 * datum + biases1; hidden = hidden.Map(x => Math.Tanh(x)); Vector<double> output = weights2 * hidden + biases2; output = output.Map(x => Math.Tanh(x)); Vector<double> error = 2 * (output - loss); Matrix<double> grad2 = error.ToColumnMatrix() * hidden.ToRowMatrix(); Vector<double> grad1 = (weights2.Transpose() * error).PointwiseMultiply(1 - hidden.PointwisePower(2)); Matrix<double> grad1Mat = grad1.ToColumnMatrix() * datum.ToRowMatrix(); weights2 -= learningRate * grad2; biases2 -= learningRate * error; weights1 -= learningRate * grad1Mat; biases1 -= learningRate * grad1; } } ``` 这段代码实现了一个基本的 GAN 模型,包括生成器和判别器两个部分。在训练过程中,首先训练生成器,然后再训练判别器。生成器使用随机噪声向量生成假数据,并计算假数据的损失;判别器则随机选择一条真实数据,并计算真实数据和假数据的损失。最后,根据损失计算梯度并更新权重和偏置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值