Слой Keras LSTM ожидает, что вход будет 3
тусклым, как (batch_size, seq_length, input_dims)
, но вы неправильно его определили. Попробуйте это
layer_lstm(units = 32, input_shape = c(seq_length, 32), batch_size = batch_size, return_sequences = T)
Вам нужно изменить ваши данные на три, где новые будут представлять последовательные данные.
Я использовал игрушечный набор данных, чтобы показать пример, здесь данные и метки изначально имеют форму ((150, 32), (150,))
, используя следующий скрипт:
seq_length = 10 # choice
dataX = []
dataY = []
for i in range(0, 150 - seq_length, 1):
dataX.append(data[i:i+seq_length])
dataY.append(labels[i+seq_length-1])
import numpy as np
dataX = np.reshape(dataX, (-1, seq_length, 32))
dataY = np.reshape(dataY, (-1, 1))
# dataX.shape, dataY.shape
Вывод: ((140, 10, 32), (140, 1))
Сейчас Вы можете смело кормить его моделью.
Хороший вопрос.
я не думаю, что существует. Я полагаю, что было бы довольно известно, если был простой способ, и я вижу, что Microsoft создает механизм в Visual Studio 2010 для развертывания различных конфигурационных файлов для развертывания и теста.
После этих слов однако; я нашел, что у Вас в эти ConnectionStrings
раздел есть своего рода заполнитель, названный "|DataDirectory |". Возможно, Вы могли взглянуть на то, что работает там...
Вот часть от machine.config
показ его:
<connectionStrings>
<add
name="LocalSqlServer"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
Для развертывания продуктов, где мы должны настроить много объектов с подобными значениями, мы используем маленькие консольные приложения, которые читают XML, и обновление на основе параметров передало в. Их тогда называет установщик после того, как он попросил у пользователя запрошенной информации.
Я борюсь немного с тем, что Вы хотите, но можно добавить, что файлу переопределения к настройкам приложения тогда установили тот файл переопределения на на основание среды.
<appSettings file="..\OverrideSettings.config">
Я не думаю, что можно объявить и использовать переменные для определения appSettings ключей в конфигурационном файле. Я всегда справлялся с конкатенациями в коде как Вы.
Usally, я заканчиваю тем, что писал статический класс со свойствами для доступа к каждой из настроек моего web.config.
public static class ConfigManager
{
public static string MyBaseDir
{
return ConfigurationManager.AppSettings["MyBaseDir"].toString();
}
public static string Dir1
{
return MyBaseDir + ConfigurationManager.AppSettings["Dir1"].toString();
}
}
Обычно, я также делаю преобразования типов при необходимости в этом классе. Это позволяет иметь введенный доступ к Вашей конфигурации, и если настройки изменяются, можно отредактировать их только в одном месте.
Обычно, замена настроек с этим классом относительно легка и обеспечивает намного большую пригодность для обслуживания.
У Вас есть несколько опций. Вы могли сделать, это со сборкой / развертывает шаг, который обработал бы Ваш конфигурационный файл, заменяющий Ваши переменные правильным значением.
Другая опция состояла бы в том, чтобы определить Ваш собственный раздел Configuration, который поддерживал это. Например, вообразите этот xml:
<variableAppSettings>
<variables>
<add key="@BaseDir" value="c:\Programs\Widget"/>
</variables>
<appSettings>
<add key="PathToDir" value="@BaseDir\Dir1"/>
</appSettings>
</variableAppSettings>
Теперь Вы реализовали бы эту пользовательскую конфигурацию использования объекты, которые обработают замену переменных для Вас во времени выполнения.
Я думал, что просто видел этот вопрос.
Короче говоря, нет, в конфигурации приложения нет никакой интерполяции переменной.
у Вас есть две опции
Немного более сложное, но намного более гибкий, альтернативный должно создать класс, который представляет раздел конфигурации. В Вашем app.config
/ web.config
файл, у Вас может быть это:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section must be the first section within the <configuration> node -->
<configSections>
<section name="DirectoryInfo" type="MyProjectNamespace.DirectoryInfoConfigSection, MyProjectAssemblyName" />
</configSections>
<DirectoryInfo>
<Directory MyBaseDir="C:\MyBase" Dir1="Dir1" Dir2="Dir2" />
</DirectoryInfo>
</configuration>
Затем в Вашем коде.NET (я буду использовать C# в своем примере), можно создать два класса как это:
using System;
using System.Configuration;
namespace MyProjectNamespace {
public class DirectoryInfoConfigSection : ConfigurationSection {
[ConfigurationProperty("Directory")]
public DirectoryConfigElement Directory {
get {
return (DirectoryConfigElement)base["Directory"];
}
}
public class DirectoryConfigElement : ConfigurationElement {
[ConfigurationProperty("MyBaseDir")]
public String BaseDirectory {
get {
return (String)base["MyBaseDir"];
}
}
[ConfigurationProperty("Dir1")]
public String Directory1 {
get {
return (String)base["Dir1"];
}
}
[ConfigurationProperty("Dir2")]
public String Directory2 {
get {
return (String)base["Dir2"];
}
}
// You can make custom properties to combine your directory names.
public String Directory1Resolved {
get {
return System.IO.Path.Combine(BaseDirectory, Directory1);
}
}
}
}
Наконец, в Вашем коде программы, можно получить доступ к Вашему app.config
переменные, с помощью новых классов, этим способом:
DirectoryInfoConfigSection config =
(DirectoryInfoConfigSection)ConfigurationManager.GetSection("DirectoryInfo");
String dir1Path = config.Directory.Directory1Resolved; // This value will equal "C:\MyBase\Dir1"
В <appSettings>
можно создать ключи приложения,
<add key="KeyName" value="Keyvalue"/>
Позже можно получить доступ к этим значениям использование:
ConfigurationManager.AppSettings["Keyname"]
Я бы порекомендовал следовать решению Мэтта Хамсмита. Если это проблема для реализации, то почему бы не создать метод расширения, который реализует это в фоновом режиме в классе AppSettings?
Что-то вроде:
public static string GetValue(this NameValueCollection settings, string key)
{
}
Внутри метода вы выполняете поиск в DictionaryInfoConfigSection с помощью Linq и возвращаете значение с соответствующий ключ. Однако вам нужно будет обновить файл конфигурации до чего-то вроде этих строк:
<appSettings>
<DirectoryMappings>
<DirectoryMap key="MyBaseDir" value="C:\MyBase" />
<DirectoryMap key="Dir1" value="[MyBaseDir]\Dir1"/>
<DirectoryMap key="Dir2" value="[MyBaseDir]\Dir2"/>
</DirectoryMappings>
</appSettings>