我在keras中使用多输出模型
model1 = Model(input=x, output=[y2,y3])
model1.compile((optimizer='sgd', loss=cutom_loss_function)
Run Code Online (Sandbox Code Playgroud)
我custom_loss_function
的;
def custom_loss(y_true, y_pred):
y2_pred = y_pred[0]
y2_true = y_true[0]
loss = K.mean(K.square(y2_true - y2_pred), axis=-1)
return loss
Run Code Online (Sandbox Code Playgroud)
我只想在输出上训练网络y2
.
当使用多个输出时,损失函数中的参数y_pred
和y_true
参数的形状/结构是什么?我可以按上述方式访问它们吗?难道y_pred[0]
还是y_pred[:,0]
?
我正在研究一种算法,我给它一些输入,我给它们输出,并给出输出3个月(给或拿)我需要一种方法来查找/计算可能是未来的输出.
现在,给出的这个问题可能与证券交易所有关,我们给出了证明约束和某些结果,我们需要找到下一个.
我偶然发现神经网络股票市场的预测,你可以谷歌它,或者你可以在这里,这里和这里阅读它.
要开始制作算法,我无法弄清楚层的结构应该是什么.
给定的约束是:
现在,我的第一个问题是,我需要输入多少个节点?
输出只有一个,很好.但正如我所说,我应该为输入层采用100个节点(假设股票价格总是整数,并且总是btw 1和100?)
隐藏层怎么样?那里有多少个节点?比方说,如果我在那里采用100个节点,我认为这不会对网络进行太多训练,因为我认为对于每个输入我们还需要考虑所有先前的输入.
比如说,我们在第4个月的第1天计算输出,我们应该在隐藏/中间层有90个节点(为了简单起见,想象每个月是30天).现在有两种情况
无论情况如何,现在当我们计算第4个月第2天的输出时,我们不仅需要那些90个输入,而且还需要最后的结果(而不是预测,它是否相同!)所以我们现在我们的中间/隐藏层有91个节点.
依此类推,它每天都会增加节点数量,AFAICT.
所以,我的另一个问题是,如果动态变化,我如何定义/设置隐藏/中间层中的节点数.
我的最后一个问题是,有没有其他特殊的算法(对于这种事物/东西),我不知道?我应该使用而不是搞乱这个神经网络的东西?
最后,有什么东西,我可能会失踪,可能会导致我(而不是我正在做的算法)预测输出,我的意思是任何警告,或任何可能使我错过的东西,我可能会失踪?
我正在编写一个非常基本的程序来使用scikit-learn的Imputer类来预测数据集中的缺失值.
我创建了一个NumPy数组,用strategy ='mean'创建了一个Imputer对象,并在NumPy数组上执行了fit_transform().
当我在执行fit_transform()之后打印数组时,'Nan'仍然存在,我没有得到任何预测.
我在这做错了什么?如何预测缺失值?
import numpy as np
from sklearn.preprocessing import Imputer
X = np.array([[23.56],[53.45],['NaN'],[44.44],[77.78],['NaN'],[234.44],[11.33],[79.87]])
print X
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit_transform(X)
print X
Run Code Online (Sandbox Code Playgroud) 我试图找出是否有可能在Apache Spark中使用MLlib对数据进行"增量训练".
我的平台是Prediction IO,它基本上是Spark(MLlib),HBase,ElasticSearch和其他一些Restful部件的包装器.
在我的应用数据中,"事件"是实时插入的,但为了获得更新的预测结果,我需要"pio train"和"pio deploy".这需要一些时间,服务器在重新部署期间会脱机.
我想弄清楚我是否可以在"预测"阶段进行增量训练,但找不到答案.
machine-learning prediction apache-spark predictionio apache-spark-mllib
我正在寻找一种算法或示例材料来研究基于已知模式预测未来事件.也许有一个名字,我只是不知道/记住它.这个一般的东西可能不存在,但我不是数学或算法的大师,所以我在这里要求方向.
一个例子,据我所知,它将是这样的:
静态事件发生在1月1日,2月1日,3月3日,4月4日.一个简单的解决方案是平均每次出现之间的天/小时/分钟/某事,将该数字添加到最后一次已知的事件,并进行预测.
我要求的是什么,或者我应该学习什么?
没有特别的目标,或任何特定的变量需要考虑.这只是个人思想,也是我学习新事物的机会.
我想预测每周可预测的某些值(低SNR).我需要预测一年中形成的一年的整个时间序列(52个值 - 图1)
我的第一个想法是使用Keras over TensorFlow开发多对多LSTM模型(图2).我正在使用52输入层(前一年的给定时间序列)和52预测输出层(明年的时间序列)训练模型.train_X的形状是(X_examples,52,1),换言之,要训练的X_examples,每个1个特征的52个时间步长.据我所知,Keras会将52个输入视为同一域的时间序列.train_Y的形状是相同的(y_examples,52,1).我添加了一个TimeDistributed层.我的想法是算法会将值预测为时间序列而不是孤立值(我是否正确?)
Keras的模型代码是:
y = y.reshape(y.shape[0], 52, 1)
X = X.reshape(X.shape[0], 52, 1)
# design network
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
# fit network
model.fit(X, y, epochs=n_epochs, batch_size=n_batch, verbose=2)
Run Code Online (Sandbox Code Playgroud)
问题是算法没有学习这个例子.它预测的值与属性的值非常相似.我是否正确建模了问题?
第二个问题:另一个想法是用1输入和1输出训练算法,但是在测试期间如何在不查看'1输入'的情况下预测整个2015时间序列?测试数据将具有与训练数据不同的形状.
tl; dr:我想预测文件复制完成.考虑到开始时间和当前进度,有哪些好的方法?
首先,我知道这根本不是一个简单的问题,预测未来很难做好.对于上下文,我试图预测长文件副本的完成.
目前的方法:
目前,我正在使用一个我自己提出的相当天真的公式:(ETC代表估计的完成时间)
ETC = currTime + elapsedTime * (totalSize - sizeDone) / sizeDone
Run Code Online (Sandbox Code Playgroud)
这是基于这样的假设,即要复制的剩余文件将以迄今为止的平均复制速度进行,这可能是也可能不是一个现实的假设(在这里处理磁带存档).
另一个想法:
我的下一个想法是记录最后n秒(或分钟,因为这些档案应该花费数小时)的进度,并且只做以下事情:
ETC = currTime + currAvg * (totalSize - sizeDone)
Run Code Online (Sandbox Code Playgroud)
这与第一种方法相反:
最后
我想起了我在大学所做的控制工程课程,其目标主要是试图让系统对突然变化做出快速反应,但不是不稳定和疯狂.
话虽如此,我能想到的另一个选择是计算上述两者的平均值,也许是通过某种加权:
我真正要求的是:
在计算机架构中,
(分支)预测和推测之间有什么区别?
这些似乎非常相似,但我认为它们之间存在微妙的区别.
我在R训练了一个模型:
require(caret)
require(randomForest)
myControl = trainControl(method='cv',number=5,repeats=2,returnResamp='none')
model2 = train(increaseInAssessedLevel~., data=trainData, method = 'rf', trControl=myControl)
Run Code Online (Sandbox Code Playgroud)
数据集相当大,但模型运行正常.我可以访问它的部件并运行命令,例如:
> model2[3]
$results
mtry RMSE Rsquared RMSESD RsquaredSD
1 2 0.1901304 0.3342449 0.004586902 0.05089500
2 61 0.1080164 0.6984240 0.006195397 0.04428158
3 120 0.1084201 0.6954841 0.007119253 0.04362755
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
> varImp(model2)
Error in varImp[, "%IncMSE"] : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)
显然应该有一个包装器,但似乎并非如此:(cf:http://www.inside-r.org/packages/cran/caret/docs/varImp)
varImp.randomForest(model2)
Error: could not find function "varImp.randomForest"
Run Code Online (Sandbox Code Playgroud)
但这特别奇怪:
> traceback()
No traceback available
> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-redhat-linux-gnu (64-bit) …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,涉及使用pybrain进行时间序列的回归.我计划在pybrain中使用LSTM层来训练和预测时间序列.
我在下面的链接中找到了示例代码
在上面的示例中,网络能够在训练后预测序列.但问题是,网络通过将其一次性输入到输入层来接收所有顺序数据.例如,如果训练数据各有10个特征,则10个特征将同时被馈送到10个输入节点.
根据我的理解,这不再是时间序列预测我是对的吗?由于每个功能被馈入网络的时间没有区别?如果我错了,请纠正我.
因此,我想要实现的是一个只有一个输入节点和一个输出节点的循环网络.输入节点是在不同时间步骤顺序馈送所有时间序列数据的地方.将训练网络以在输出节点处再现输入.
您能否建议或指导我构建我提到的网络?非常感谢你提前.
prediction ×10
algorithm ×3
keras ×2
python ×2
time-series ×2
apache-spark ×1
file-copying ×1
forward ×1
imputation ×1
loss ×1
lstm ×1
model ×1
numpy ×1
predictionio ×1
pybrain ×1
r ×1
scikit-learn ×1
time ×1