RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-341733

Potion's questions

Martin Hope
Potion
Asked: 2022-08-14 22:25:22 +0000 UTC

从同步上下文过渡到异步 - 哪个更好 - 任务还是无效?

  • 1

从同步上下文转移到异步上下文的最佳方法是什么?如果父方法不知道如何等待任何东西,但你想异步运行一些东西,那么最好的使用方法是什么?似乎他们写道 async void 是一种不好的做法,因为它没有控制任务,启动它 - 并且不清楚接下来会发生什么。但是从同步方法启动任务时结果不一样吗?他没有等她,发射——然后忘记了。

一般来说,任务是从同步方法中启动一个异步方法,如何最正确地做到这一点?

class Hello
{         
    static void Main(string[] args)
    {
        SomeVoidMethod();
        SomeTaskMethod();
    }

    async void SomeVoidMethod()
    {

    }

    async Task SomeTaskMethod()
    {
        return Task.CompletedTask;
    }
}
c# async-await
  • 1 个回答
  • 63 Views
Martin Hope
Potion
Asked: 2022-08-07 20:28:36 +0000 UTC

5 月 30 日之后从 Gmail 发送邮件(禁用不安全的方法).NETCore

  • 2

直到 5 月 30 日,我使用 Gmail 从我的网站发送确认电子邮件。

看起来像这样

public static async Task<bool> SendEmail(string email, string subject, string body)
    {
        var fromAddress = new MailAddress("securemail@gmail.com", "Регистрация");
        var toAddress = new MailAddress(email);
        const string fromPassword = "securepass";

        var smtp = new System.Net.Mail.SmtpClient
        {
            UseDefaultCredentials = false,
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
            Timeout = 20000
        };
        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = body,
        })
        {
            await smtp.SendMailAsync(message);
        }

        return true;
    }

如您所见,使用邮件密码对登录。但自 5 月 30 日起,谷歌禁用了这种“不安全的方式”,现在你需要以某种方式安全登录。

Google 本身通过 Oauth2 和同意屏幕说明您需要什么,但这些是为最终用户提供的服务,当您指定您的 Google 邮件并且 Google 允许您访问时。

但我不需要那样,我只需要从我的邮件中发送一封信到我的 .NETCore 应用程序中的其他邮件,最终用户无权访问该邮件。怎么做?

c# asp.net-core
  • 1 个回答
  • 345 Views
Martin Hope
Potion
Asked: 2022-07-01 17:13:45 +0000 UTC

当我从 .NetCore 代码创建 <a> 标记时它不起作用

  • 3

有一个简单的任务 - 从一行中获取链接并使其在文本中处于活动状态。

这是通过以下方式完成的

   string wholeMessage = "Ну просто какой то длиииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииииинный текст в конце ссылка например https://google.com"
   string url = "https://google.com"

   wholeMessage = wholeMessage.Replace(url, GetALinkFromAdress(url));

   public static string GetALinkFromAdress(string address)
        {
           
            string before = "<a target=\"_blank\" href=\"";
            string medium = "\">";
            string after = "</a>";
            return before + address + medium + address + after;
        }

但最后,在最终视图中,链接没有突出显示并且不起作用,标签被视为行的一部分。

这是它在视图代码中的样子

它在浏览器控制台中的外观

那些。很明显,标签没有被浏览器处理。为什么会这样以及如何对其进行处理?

c#
  • 0 个回答
  • 0 Views
Martin Hope
Potion
Asked: 2022-07-05 17:55:22 +0000 UTC

如果有一个私有字段和一个引用该字段的公共属性,那么在类内部访问什么?

  • 1

假设我们有一个字段和一个引用它的属性。

public int I =>_i;
private int _i;

很明显,所有外部类都将引用该属性,因为 它是公开的。在这个班级里?可以访问属性和字段,并且它们是相同的。没有添加额外的逻辑,它只是一个吸气剂。

在课堂内引用时要引用什么?在公共财产或私人领域?什么更正确?可以从msdn吃任何规则吗?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2022-05-05 16:40:08 +0000 UTC

集合、数组和泛型之间的单值差异,以及它们的内部结构 C#

  • -1

对收藏感到困惑,我需要简要介绍所有收藏的要点。

数组可以称为集合吗?常识说是的,因为这是元素的集合,但在尖锐的地方有数组,有集合,还有泛型。并不是所有的事情都对他们很清楚。

  1. 我们知道集合是泛型之前的通用元素分组机制的旧版本。这些是 ArrayList、Stack、Queue、Hashtable

您添加的所有内容都保存为object,这会导致装箱和拆箱,如果变量是值类型,例如 int,那么我们复制它 - 结果我们得到两个变量。

问题 - 这仅适用于集合,还是简单数组的工作方式相同?

分配单元格值时,int 数组是否进行装箱和拆箱?我们是在分配数组单元格值时复制 int 值,还是以其他方式工作?

  1. Richter 写道,泛型的优点之一是不需要打包——拆包,因为。泛型是强类型的,不会与对象相互转换,而是以这种方式存储的。

但是它们存储在堆上吗?如果原始类型是值类型,我们还有值复制吗?

  1. 引用类型对所有集合的工作方式是否相同——它们不会被复制,只是将对实例的引用存储在它们的单元格中?数组、集合和泛型的主要区别在处理值类型时是否准确体现?

  2. 是否所有集合和数组都引用类型,它们的所有单元格及其所有内容是否都存储在堆上?

  3. 收藏的底层是什么?ArrayList 或 List 是如何在内部实现的?我读到 Dictionary 在引擎盖下有一个 Hashtable,它只是使用键的哈希值来查找,但是 Hashtable 本身是如何工作的呢?里面有数组吗?

这些问题重叠并且有点令人困惑,因为我将我所知道的关于集合的所有内容都放入其中。貌似我用过,但一切都散了,现在读了里希特,总体上是一头雾水。

如果有关于比较所有集合及其内部实现的简短摘要,我将不胜感激。

c#
  • 2 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2022-03-14 17:13:01 +0000 UTC

单击鼠标左键需要一个图像元素,并且应该是一个表单元素

  • 0

有一个具有内部逻辑的表单 - 当您将鼠标悬停在图像上时,文本会显示在其顶部。
这是通过<input type="image" onClick = this.form.submit>

问题是当您单击鼠标左键时,浏览器将此表单识别为图像,并且当您在新窗口中打开元素时,它会在此处打开图像。必须的形式)

如何解决?旧的逻辑也必须有效 - 当您将鼠标悬停在图像上时,一个元素会出现在它的顶部,当您单击图像时,会提交表单,但是当您单击带有鼠标右键,表单的浏览器菜单出来(在新窗口中打开),而不是图片(在新窗口中打开图片)

<div class="col-3" onmouseover="document.getElementById('@divID').style.display = 'block';" onmouseout="document.getElementById('@divID').style.display = 'none';">
  <form asp-action="AddComment" asp-controller="Comments" method="post" enctype="multipart/form-data">
    <div class="box maintxt">
      <input style="box-shadow: 1px 1px 5px black;" type="image" alt="Submit Form" src="https://previews.123rf.com/images/vera1703/vera17031811/vera1703181100083/114147510-two-green-strips-of-ram-for-a-computer-isolated.jpg" onclick="this.form.submit" class="img-fluid goodBoxShadow rounded" width="175" height="250">
      <div id="@divID" style="background-color: red; display: none; pointer-events: none;" class="overlay-text absFullSize">
        <div class="mh-100 overflow-hidden border-0 textFade" style="--gradient:linear-gradient(transparent 150px, red);">

          <div class="bootstrapp-card-body overflow-hidden border-0" style="background-color: red">

            <h11 class="text-left font-italic text-white shadowTextBlack">Текст который появлется при наведении мышкой</h11>

          </div>
        </div>
      </div>

    </div>
  </form>
</div>

稍后添加:为澄清起见,我在左侧附上一张图片 - 当你左键单击我的图片时会出现什么,在右侧 - 我需要什么。

javascript
  • 3 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2022-03-07 00:03:53 +0000 UTC

谷歌云 - Docker 中的 json 键

  • 0

有一个 .NETCore 应用程序,它通过 Google Cloud Translation SDK 使用 Google 服务

应用内部没有授权,只是翻译的代码

 TranslationClient client = TranslationClient.Create();
                    var response = client.TranslateText(
                        text: phrase,
                        targetLanguage: endLanguage,
                        sourceLanguage: startLanguage);

要使用它们,您需要从 Google 控制台下载 .json 格式的密钥,然后在系统环境变量中指定它的路径

GOOGLE_APPLICATION_CREDENTIALS = C:/Key.json

它适用于 Visual Studio 的 Windows 10,但我在 prod 上有 Ubuntu,在它上面有 docker,在 docker 中它是一个 .NETCore 应用程序。

如何从 docker 指定它的路径?我可以把这个文件放在项目的根目录下,然后它会在docker里面,但是通过环境变量访问不会这样做。也许有一种方法可以告诉 Google 从项目中直接访问文件,而不是通过环境变量?

Dockerfile

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["MyApp.App.csproj", ""]
RUN dotnet restore "./MyApp.App.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyApp.App.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyApp.App.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.App.dll"]
c#
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2022-03-04 20:52:27 +0000 UTC

对字典进行排序,从末尾提取一个值并在开头插入它

  • 0

有一本字典

Dictionary<string, string> langNames = new Dictionary<string, string>()
        {

            {"ru", "Русский"},
            {"en", "english"},
            {"eo","Esperanto"},
            {"fr-FR","français"},
            {"de","Deutsch"},
            {"zh","漢語"},
            {"ja","日本語"},
            {"ko","한국어"},
            {"hi","हिन्दी, हिंदी"},
            {"it","Italiano"},
            {"es","Español"},
            {"ar","العربية"},
            {"el","ελληνικά"},
            {"bn","বাংলা"},
            {"pt","Português"},
            {"uk","Українська"}

    };

还有第二个字典有相同的键,但有点混淆

Dictionary<string, string> ShuffledLangs = new Dictionary<string, string>()

        {

            {"de","a"},
            {"zh","b"},
            {"ja","x"},
            {"ko","r"},
            {"hi","k"},
            {"it","d"},
            {"es","n"},
            {"ar","q"},
            {"el","e"},
            {"bn","b"},
            {"pt","m"},
            {"uk","n"},
            {"ru", "n"},
            {"en", "b"},
            {"eo","n"},
            {"fr-FR","n"},

    };

并且您需要使用第二个字典顺序执行 2 个操作

1)对其进行排序,使键与原始键相同(ru,en,eo等)

2)然后取一个元素,例如键“es”,并将其移动到字典的开头。

最终结果应该是这样的

        {
            {"es","n"},
            {"ru", "n"},
            {"en", "b"},
            {"eo","n"},
            {"fr-FR","n"},
            {"de","a"},
            {"zh","b"},
            {"ja","x"},
            {"ko","r"},
            {"hi","k"},
            {"it","d"},
            {"ar","q"},
            {"el","e"},
            {"bn","b"},
            {"pt","m"},
            {"uk","n"},
           

    };

因为 字典默认没有排序,有一个很长的变体,即 编写一个比较器,查看这个或那个字典键与参考键相比有多高并返回 +1 或 -1,并根据它使用 OrderBy,但也许这可以通过更优雅的 LINQ 查询以某种方式完成?

而第二点也是不可理解的——字典没有Insert方法,因为 没有索引,但是枚举它仍然以与创建时相同的顺序返回它。是否有必要以某种方式重新创建字典,在初始化期间在开头抛出所需的单元格?或者是否还有一个简单的单行 LINQ 查询可以解决这个问题?

c#
  • 2 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2022-01-29 18:53:21 +0000 UTC

行块的连接

  • 1

我有一个字符串列表的列表。

List<string> firstList = new List<string>(){"one","two,"three"};
List<string> secondList = new List<string>(){"three","four,"five"};
List<string> thirdList = new List<string>(){"ten","eleven,"twelve"};

List<List<string>> blocksOfStrings = new List<List<string>>(){firstList,secondList,thirdList};

而且您需要编写一个方法,将工作表与相交值结合起来。那些。在这种情况下,我们让 firstList 和 secondList 包含相同的字符串 - “three”,这意味着它们需要合并为一个 List 并删除重复项

为此写了一个方法,

List<List<string>> MergeBlockOfStrings(List<List<string>> blocksOfStrings)
{
    List<List<string>> newBlockOfStrings = new List<List<string>>();

    foreach (var block in blocksOfStrings)
    {
        foreach (var block2 in blocksOfStrings)
        {
            if (block2 != block)
            {
                foreach (var str1 in block)
                {
                    foreach (var str2 in block2)
                    {
                        if (str1 == str2)
                        {
                            var newBlock = new List<string>();
                            foreach (var firstBlockString in block)
                            {
                                if (!newBlock.Contains(firstBlockString))
                                {
                                    newBlock.Add(firstBlockString);
                                }
                            }
                            foreach (var secondBlockString in block2)
                            {
                                if (!newBlock.Contains(secondBlockString))
                                {
                                    newBlock.Add(secondBlockString);
                                }
                            }
                            newBlockOfStrings.Add(newBlock);
                        }
                    }
                }
            }
        }
    }

    return newBlockOfStrings;
}

但它很笨重,看起来很糟糕。有没有办法让这更容易和更容易理解,例如,通过 LINQ?

它应该如何工作

在方法的入口处

List<string> firstList = new List<string>(){"one","two","three"};
List<string> secondList = new List<string>(){"three","four","five"};
List<string> thirdList = new List<string>(){"ten","eleven","twelve"};

方法使用

List<List<string>> MergedBlocksOfStrings = MergeBlockOfStrings(blockOfStrings);

输出应该是

List<string> mergedList = new List<string>(){"one","two","three","four","five"};
List<string> thirdList = new List<string>(){"ten","eleven","twelve"};

List<List<string>> blocksOfStrings = new List<List<string>>(){mergedList,thirdList};
c#
  • 2 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2021-11-17 15:47:30 +0000 UTC

打开旧的dll

  • 2

Unity 有一个旧资产 - 最新版本是 .NET 3.5 这个资产可以在网格上绘制纹理,并且做得很好。我需要增加画笔的大小 - 在原始画笔中,它受到 1 到 100 的滑块的限制,这使得无法在大型物体上绘画 - 画笔太小了。我曾考虑在脚本中更改它,但不幸的是,所有代码都移到了单独的 .dll 程序集中

我尝试打开 DotPeek 和 .NetReflector .dll 并成功打开,我什至找到了正确的类和变量,没有任何问题-brush.size

但接下来是什么?我需要的代码看起来像这样

this.brush.size = GUI.Slider.value(0,100);

理想情况下,您可以将其替换为

this.brush.size = GUI.Slider.value(0,10000);

这可能会解决我所有的问题。但在 DotPeek 和 Reflector 内部,没有任何变化。如何更改一行并将dll保存回来?

如果我选择导出项目,它会为我创建一个新的 C# 项目,其中包含此程序集使用的一些单元类,以及资产本身的类。这个项目不再被编译,尽管它只是由反编译器创建的。找不到某些类型、类和对 dll 的引用。但是没有它,在集会中,他如何生活?

也许我用大炮射击麻雀并改变路线可以更快更容易 - 但怎么做呢?也许它可以在运行时完成......

c#
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2021-10-31 20:20:55 +0000 UTC

用字符 \u0431 C# 解码字符串

  • 0

有一条线像

string s ="\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."

如果我将它插入到一些在线服务中,那么它被成功解码为

быть 12 цифр.

在线服务显示不同的编码,由他自动选择。比如那个原文是unicode,翻译后是UTF8

好的,我们用 C# 写同样的东西

            string substring ="\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."
            Encoding utf8 = Encoding.UTF8;
            Encoding unicode = Encoding.Unicode;

            // Convert the string into a byte array.
            byte[] unicodeBytes = unicode.GetBytes(substring);

            // Perform the conversion from one encoding to the other.
            byte[] utf8Bytes = Encoding.Convert(unicode, utf8, unicodeBytes);

            // Convert the new byte[] into a char[] and then into a string.
            char[] utf8Chars = new char[utf8.GetCharCount(utf8Bytes, 0, utf8Bytes.Length)];
            utf8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0);
            string utf8String = new string(utf8Chars);
            Console.WriteLine(utf8string);

在输出中我们得到完全相同的

\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.

据我了解,我误解了编码的本质 - 编码对字节进行编码,字符串最初是用 C# 内部的东西编码的,可能是相同的 UTF8,所以它不会尝试重新编码字符 \u0431 和其余部分转换为西里尔文,但只是认为该字符串已经是 UTF8。

问题是如何将这些相同的转义序列提供给解码器,这意味着某种西里尔字符,以便最终它给我与在线服务相同的东西?

应评论员的要求,我推导出utf8chars,这是一个chars数组,所以我通过foreach推导出来

结论

\

你

0

四

四

和

一

2

正确答案后评论。

32 分钟前回答

@vp_arth

Regex.Unescape 有帮助。确实,结果很不方便——我想缩短问题,所以我提前写了这行。但实际上我是从网络请求中得到这个字符串的,当我输出它时,我得到了未解码的字符。如果您再次获取字符并将它们敲成一个字符串,则所有内容都会正确显示。显然,该行只是第一次执行 Regex.Unescape,因此它重新正确输出

c#
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-10-06 04:05:58 +0000 UTC

用数字和字符对字符串进行排序

  • 2

我有一个字符串数组

List<string> s = new List<string>{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15c","15b","150","15a"};

如果我们只是打电话

s.Sort();

然后将它们排序为 1 10 11 12 13 14 150 15a 15b 15c 2 3 4 5 6 7 8 9

如何让它产生直观的人工排序?那些。按字符串排序也有效,但首先 - 也是按数字的值。那些。在这种情况下,正确的输出是

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15a,15b,15c,150;

我知道您可以编写一个比较器,它可能会在字符串中查找数字,如果找到它们,检查还有更多的地方,以及字符串是否按字母顺序排列,但是如何实现呢?

这里的问题更有可能,也许已经实施了类似的事情?也许有某种 StringComparsion.NumericFirst,它只是作为参数传递给排序并按照人们对其进行排序的方式进行排序?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-06-28 01:01:34 +0000 UTC

带有垂直 HTML 元素的水平列表

  • 0

我有一个水平列表,其中每个项目都只是文本,而且效果很好

ul.hr {
  margin: 0;
  /* Обнуляем значение отступов */
  padding: 4px;
  /* Значение полей */
}

ul.hr li {
  display: inline;
  /* Отображать как строчный элемент */
  margin-right: 5px;
  /* Отступ слева */
  border: 1px solid #000;
  /* Рамка вокруг текста */
  padding: 3px;
  /* Поля вокруг текста */
}
<ul class="hr">
  <li>Мчади</li>
  <li>Када на мацони</li>
  <li>Пахлава</li>
  <li>Кчуч</li>
  <li>Лилибдж</li>
</ul>

结论是:

   Мчади  Када на мацони  Пахлава  Кчуч Лилибдж

但是如果我尝试让一些元素更复杂,像这样

ul.hr {
  margin: 0;
  /* Обнуляем значение отступов */
  padding: 4px;
  /* Значение полей */
}

ul.hr li {
  display: inline;
  /* Отображать как строчный элемент */
  margin-right: 5px;
  /* Отступ слева */
  border: 1px solid #000;
  /* Рамка вокруг текста */
  padding: 3px;
  /* Поля вокруг текста */
}
<ul class="hr">
    <li>
        Первая строчка
        <br />
        Вторая строчка
        <br />
        Третья строчка
    </li>
    <li>Када на мацони</li>
    <li>Пахлава</li>
    <li>
        Первая строчка
        <br />
        Вторая строчка
        <br />
        Третья строчка
    </li>
    <li>Лилибдж</li>
</ul>

之后的一切都是如何 <br />换行的。有<p>一个类似的故事。

如何创建一个看起来像这样的列表?

Первая строчка                                            Первая строчка
Вторая строчка                                            Вторая строчка
Третья строчка       Када на мацони       Пахлава         Третья строчка          Лилибдж
html
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-06-27 22:21:10 +0000 UTC

RazorPages 中的水平列表

  • 0

您需要创建一个水平列表。有风格

<style>
    ul.hr {
        margin: 0; /* Обнуляем значение отступов */
        padding: 4px; /* Значение полей */
    }

        ul.hr li {
            display: inline; /* Отображать как строчный элемент */
            margin-right: 5px; /* Отступ слева */
            border: 1px solid #000; /* Рамка вокруг текста */
            padding: 3px; /* Поля вокруг текста */
        }
</style>

有一个示例,此样式有效并显示水平列表

<ul class="hr">
    <li>Мчади</li>
    <li>Када на мацони</li>
    <li>Пахлава</li>
    <li>Кчуч</li>
    <li>Лилибдж</li>
</ul>

还有一个例子,这种风格不起作用。

<h3>Топ 5 самых читаемых</h3>
@{
    if (Model.TopReaded == null)
    {
        return;
    }
    foreach (var topRateBook in Model.TopReaded)
    {
        <ul class="hr">
            <li>
                <p><img src="@Url.Content(topRateBook.Value)" width="200" height="200"></p>
                <p>@topRateBook.Key.RateOfBook</p>
                <p>@topRateBook.Key.ReadCount</p>
                <p>@topRateBook.Key.BookName</p>
                <p>@topRateBook.Key.AuthorPseudonym</p>

            </li>

        </ul>

    }
}

如何从这个循环的元素创建一个水平列表?

补充:从答案中我看到问题的形成并不完全正确。

该循环在一次迭代中生成一张图片和 3 行。这是一个元素,必须是水平的,即。上图,然后是一条线,然后是一条线,然后是一条线。

一组这样的元素应该是水平的。方案如下

Картинка     Картинка    Картинка    Картинка
строчка      строчка     строчка     строчка
строчка      строчка     строчка     строчка
строчка      строчка     строчка     строчка
c#
  • 3 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-05-09 06:55:45 +0000 UTC

GAN 神经网络 - 噪声变化,但读数相同。这怎么可能?

  • 2

使用 Google 教程中的神经网络 https://www.tensorflow.org/tutorials/generation/dcgan

施工步骤

1)准备图像样本

2) 制作一个生成器(输入 - 许多神经元 (7x7x256),输出 - 1 张 28 x 28 灰度图像,从 -1 到 1)

3)我们制作了一个鉴别器——在输入端——一个灰度大小为 28 x 28 的图像,输出是一个判定数字,如果为 1,则图像 100% 为真,如果为 0,则图像肯定是假的。

4) 开始锻炼:

向发生器提供随机噪声

生成器生成图片

判别器看它是什么样的图片并呈现它的判决(比如说 0.1)

判别器查看完美图片并做出判断

我们计算生成器误差(它等于判别器对理想图片的正确答案(即1)与判别器如何估计我们的图片之间的交叉熵(0.1)

计算判别器误差(它等于 1 与判别器如何评价完美图片之间的交叉熵加上 0 与判别器如何评价错误图片之间的交叉熵)

应用这些错误来训练我们的模型

    gradients_of_generator = gen_tape.gradient(gen_loss, createGenerator.trainable_variables)
    gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)

    generator_optimizer.apply_gradients(zip(gradients_of_generator, createGenerator.trainable_variables))
    discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))
    `

我们一遍又一遍地重复。

问题

1)我是否正确理解了生成对抗网络的算法?

2)为什么输入端的生成器有这么多第一神经元?为什么是 7x7x256?256 是 BATCH_SIZE,用于样品制备。但是为什么要乘以 7x7?

 model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100, )))

3)每次在训练迭代中,输入噪声都会发生变化!而且不小心!在训练模型时,我们会为其添加基于误差的梯度,但如果输入数据一直是随机的,我们如何才能得到正确的答案?网络正常工作,经过 50 次迭代,数字看起来像数字,但为什么没有随机噪声干扰呢?

noise = random.normal([256, 100])

    with GradientTape() as gen_tape, GradientTape() as disc_tape:
      # получаем изображения от генератора изображений, передавая туда шум.
      generated_images = createGenerator(noise, training=True)
    ```


python
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-05-09 01:37:39 +0000 UTC

用 4 个参数重塑 NumPy

  • 1

有这样的代码

#Тут мы загружаем датасет MNIST
(train_images, train_labels), (_, _) = keras.datasets.mnist.load_data()

#На выходе получаем пары вида "массив изображений цифры 0", 0
#"массив изображений цифры 1", 1 и так далее, вплоть до цифры 9


print(train_images.shape) - выводит (60000, 28, 28)


train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')


print(train_images.shape) - выводит (60000, 28, 28, 1)

这些数字是什么意思?28x28 是 MNIST 图像本身的分辨率,这里一切都很清楚。

什么是60000?是数组长度 - 矩阵高度 - 图像总数吗?为什么我们要把这些转换成另一个矩阵,1 是什么意思呢?

我知道 reshape 将数组转换为新形状而不更改其数据,但我无法想象 (60000, 28, 28) 和 (60000, 28, 28, 1) 之间有什么区别,它看起来像什么? 它是用来做什么的?

python
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-04-27 23:30:40 +0000 UTC

为什么 Sigmoid 的激活函数有效而 ReLU 无效?

  • 3

有这个代码:

from keras.models import Sequential
from keras.layers import Dense
import numpy
from numpy import exp, array, random, dot

# задаем для воспроизводимости результатов
numpy.random.seed(2)

# разбиваем датасет на матрицу параметров (X) и вектор целевой переменной (Y)
X = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])

Y = array([[0, 1, 1, 0]]).T

# создаем модели, добавляем слои один за другим
model = Sequential()
model.add(Dense(1, input_dim=3, activation='relu')) # входной слой требует задать input_dim


# компилируем модель, используем градиентный спуск adam
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])

# обучаем нейронную сеть
model.fit(X, Y, epochs = 10000, batch_size=4)

# оцениваем результат
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
pre = model.predict(array([[0, 1, 0]]))
print(pre)

precl = model.predict_classes(array([[1,0,0]]))
print(precl)

而当我使用ReLU激活函数时,准确率永远不会超过 50%,而且答案是错误的。当我使用Sigmoid时,一切都会立即收敛。

我读过ReLU现在是大多数情况下的首选。我的情况有什么问题?

结果(应为:0、1):

对于ReLU:

accuracy: 50.00%
[[0.9953842]]
[[0]]

对于乙状结肠:

accuracy: 100.00%
[[0.13338517]]
[[1]]
python
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-04-27 22:21:22 +0000 UTC

Keras - 准确率 100%,但结果即使与训练数据集也不匹配

  • 2

有这个代码:

from keras.models import Sequential
from keras.layers import Dense
import numpy
from numpy import exp, array, random, dot

# задаем для воспроизводимости результатов
numpy.random.seed(2)

# разбиваем датасет на матрицу параметров (X) и вектор целевой переменной (Y)
X = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])

Y = array([[0, 1, 1, 0]]).T

# создаем модель, добавляем 1 слой и 3 значения для активации
model = Sequential()
model.add(Dense(1, input_dim=3, activation='sigmoid'))


# компилируем модель, используем градиентный спуск adam
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])

# обучаем нейронную сеть
model.fit(X, Y, epochs = 1000, batch_size=10)

# оцениваем результат
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
pre = model.predict(array([[0, 0, 1]]))
print(pre)

如您所见,该值[0, 0, 1]已经在训练集中,其正确的延续是= 0.

在输出中,我得到了这个:

accuracy: 100.00%
[[0.4054786]]

它应该是,分别0。

从训练集中以 100% 的准确率预测值怎么会出错?我做错了什么?

python
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-01-05 23:44:28 +0000 UTC

相同比例的随机

  • 1

有这样的代码。

(int Chance, ThingType prize)[] chances =
    {

            (Chance: 50, prize: ThingType.Keg),
            (Chance: 50, prize: ThingType.Health),
    };

    int chance = Random.Range(0, 100) + 1;

    for (int index = 0; index < chances.Length; index++)
    {
        var pair = chances[index];
        if (chance <= pair.Chance)
            return pair.prize;
    }
    return ThingType.Chest;

它允许您根据所有概率加起来为 100 的事实来选择随机奖品。

但是,如果在这个元组数组中存在具有相同机会的事物,那么列表中的第一个将被淘汰——在这种情况下它ThingType.Keg永远不会——列表中的第二个,即ThingType.Keg

如何编写才能成功处理具有相等和不等概率的元组数组?嗯,即 预计会有这样的事情

在入口

(int Chance, ThingType prize)[] chances =
    {
            (Chance: 70, prize: ThingType.Gold)
            (Chance: 30, prize: ThingType.Kind),
            (Chance: 50, prize: ThingType.Keg),
            (Chance: 50, prize: ThingType.Health),
    };

在出口处 - 有 35% 的机会返回ThingType.Gold ,有 15% 的机会返回ThingType.Kind ,有 25% 的机会返回ThingType.Keg ,有 25% 的机会返回ThingType.Health

但有一件事必须确定返回

c#
  • 1 个回答
  • 10 Views
Martin Hope
Potion
Asked: 2020-10-20 02:02:59 +0000 UTC

在手机上安装apk时应用程序不会崩溃,但从GPlay下载时会崩溃

  • 3

在手机上安装apk时应用程序不会崩溃,但从GPlay下载时会崩溃

我将应用程序上传到 Play Market,我下载了它,但在一些手机上它崩溃了。手动上传到手机的同一个 apk(无论是 adb 安装还是只是删除 apk 并安装它都没有关系) - 可以正常工作。

崩溃发生在引擎加载的最开始,徽标字面上出现并立即崩溃。

崩溃本身并没有屈服于解密,addr2line 不适用于 64 位应用程序,但崩溃的是 64 位 apk。

10-19 19:53:26.343: W/StaticLayout(1498): maxLineHeight should not be -1.  maxLines:1 lineCount:1
10-19 19:53:26.345: W/ExpandableNotificationRow(1498): setActionsBackground,null == view,mPublicLayout
10-19 19:53:26.357: E/CRASH(2943): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 000000767b481ff0
10-19 19:53:26.358: E/CRASH(2943): Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
10-19 19:53:26.358: E/CRASH(2943): Build fingerprint: 'HONOR/LLD-L31/HWLLD-H:8.0.0/HONORLLD-L31/132(C10):user/release-keys'
10-19 19:53:26.358: E/CRASH(2943): pid: 2943, tid: 2972, name: UnityMain  >>> com.FreeBacon.Hau <<<
10-19 19:53:26.358: E/CRASH(2943):     sp   000000767b482020  pc   00000076773acf34  pstate 0000000020000000
10-19 19:53:26.358: E/CRASH(2943): backtrace:
10-19 19:53:26.360: W/ExpandableNotificationRow(1498): setActionsBackground,null == view,mPublicLayout
10-19 19:53:26.382: W/StaticLayout(1498): maxLineHeight should not be -1.  maxLines:1 lineCount:1
10-19 19:53:26.386: I/chatty(1498): uid=10027(u0_a27) com.android.systemui identical 5 lines
10-19 19:53:26.386: W/StaticLayout(1498): maxLineHeight should not be -1.  maxLines:1 lineCount:1

如果有人遇到过这种行为,请告诉我从 Play Market 下载并手动安装的同一个 apk 有什么区别,并建议一种从 64 位 apk 解密崩溃的方法。我把它上传到商店和AppBundle和只是Apk,结果是一样的,上面的日志取自apk

c#
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5