我在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]?
我研究了由变分自动编码器 (VAE) 演示的自定义损失层的 Keras 示例。他们在示例中只有一个损失层,而 VAE 的目标由两个不同的部分组成:重建和 KL-Divergence。但是,我想绘制/可视化这两个部分在训练期间如何演变并将单个自定义损失分成两个损失层:
Keras 示例模型:
我的型号:
不幸的是,Keras 只在我的多重损失示例中输出一个单一的损失值,如我的 Jupyter Notebook 示例中所示,我已经实现了这两种方法。有人知道如何获得由 增加的每个损失的值add_loss吗?此外,在给定多次add_loss调用(均值/总和/...?)的情况下,Keras 如何计算单个损失值?
我有一个任务,它将avro输出写入由输入记录的几个字段组织的多个目录中.
For example : Process records of countries across years and write in a directory structure of country/year eg: outputs/usa/2015/outputs_usa_2015.avro outputs/uk/2014/outputs_uk_2014.avro
AvroMultipleOutputs multipleOutputs=new AvroMultipleOutputs(context);
....
....
multipleOutputs.write("output", avroKey, NullWritable.get(),
OUTPUT_DIR + "/" + record.getCountry() + "/" + record.getYear() + "/outputs_" +record.getCountry()+"_"+ record.getYear());
Run Code Online (Sandbox Code Playgroud)
下面的代码用什么输出提交器来编写输出.用于推测执行是不安全的?通过推测执行,这会导致(可能导致)org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException
在这篇文章中 Hadoop Reducer:如何使用推测执行输出到多个目录? 建议使用自定义输出提交器
来自hadoop AvroMultipleOutputs的以下代码未说明推测执行的任何问题
private synchronized RecordWriter getRecordWriter(TaskAttemptContext taskContext,
String baseFileName) throws IOException, InterruptedException {
writer =
((OutputFormat) ReflectionUtils.newInstance(taskContext.getOutputFormatClass(),
taskContext.getConfiguration())).getRecordWriter(taskContext);
...
}
Run Code Online (Sandbox Code Playgroud)
如果baseoutput路径在作业目录之外,write方法也不会记录任何问题
public void write(String namedOutput, Object key, Object value, String baseOutputPath)
Run Code Online (Sandbox Code Playgroud)
在作业目录外写作时,AvroMultipleOutputs(其他输出)是否存在推测执行的实际问题?如果,那么我如何覆盖AvroMultipleOutputs以拥有它自己的输出提交器.我在AvroMultipleOutputs中看不到任何输出格式,它使用的输出提交者
java hadoop speculative-execution hadoop-yarn multipleoutputs
我想我不了解多输出网络。
我一直都了解实现的实现方式,并且成功地训练了一个这样的模型,但我不了解如何训练多输出深度学习网络。我的意思是,培训期间网络内部发生了什么?
以keras功能性API指南中的以下网络为例:
您可以看到两个输出(aux_output和main_output)。反向传播如何运作?
我的直觉是该模型进行两次反向传播,每个输出一次。然后,每个反向传播都会更新退出之前的图层的权重。 但这似乎是不正确的:从这里(SO),我得到的信息是,尽管有多个输出,但只有一个反向传播;根据输出对使用的损失进行加权。
但是,我仍然不知道如何训练网络及其辅助分支。由于未直接连接到主输出,辅助分支权重如何更新?网络的辅助分支的根与主输出之间的部分是否受到损失加权的影响?还是权重仅影响连接到辅助输出的网络部分?
另外,我正在寻找有关此主题的好文章。我已经读过GoogLeNet / Inception文章(v1,v2-v3),因为该网络正在使用辅助分支。
backpropagation neural-network multipleoutputs deep-learning keras
就像标题中所述,我想知道如何让自定义层返回多个张量:out1、out2、...outn?
我试过
keras.backend.concatenate([out1, out2], axis = 1)
Run Code Online (Sandbox Code Playgroud)
但这仅适用于具有相同长度的张量,并且它必须是另一种解决方案,而不是每次都将两个张量连接起来,是吗?
我对这个问题做了很多研究,但没有找到令人满意的答案。我必须重命名来自 spark 的输出文件。
目前我在 S3 中输出我的 spark 数据帧,然后我再次读取它,然后再次重命名和复制。问题是我的 spark 作业需要 16 分钟才能完成,但从 S3 读取然后在 S3 中重新命名和写入又需要 15 分钟。
有什么办法可以重命名我的输出文件..我没问题 part-00000
这就是我保存数据框的方式
dfMainOutputFinalWithoutNull.repartition(50).write.partitionBy("DataPartition", "PartitionYear")
.format("csv")
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
.option("nullValue", "")
.option("delimiter", "\t")
.option("quote", "\u0000")
.option("header", "true")
.option("codec", "bzip2")
.save(outputFileURL)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,任何想法如何使用 hadoop 文件格式?
目前我正在这样做,如下所示
val finalFileName = finalPrefix + DataPartitionName + "." + YearPartition + "." + intFileCounter + "." + fileVersion + currentTime + fileExtention
val dest = new Path(mainFileURL + "/" + finalFileName)
fs.rename(urlStatus.getPath, dest)
Run Code Online (Sandbox Code Playgroud)
问题是我有 50GB 的输出数据,它创建了非常多的文件,重命名这么多文件需要很长时间。
成本明智也很昂贵,因为我的 …
keras ×4
python ×2
apache-spark ×1
hadoop ×1
hadoop-yarn ×1
hadoop2 ×1
java ×1
layer ×1
loss ×1
model ×1
output ×1
prediction ×1
scala ×1
tensorflow ×1