我正在通过一个简单的卷积网络来处理MNIST数据集。我想手动告诉程序完成流程的每个步骤,即不使用model.fit遍历每个Epoch和批处理(我想更好地了解tensorflow的内部工作原理。)
目前,我有:
let EPOCHS = 10;
let batches = Math.floor(TRAIN_DATA_SIZE/BATCH_SIZE);
for (let i = 0; i < EPOCHS; i++){
for (let j = 0; i < batches; i++){
let inputs = await getNextTrain(BATCH_SIZE,TRAIN_DATA_SIZE, data);
let inputXs = inputs[0];
let inputYs = inputs[1];
let output = await model.evaluate(inputXs,inputYs);
遍历每个纪元和每个批次以进行traian。但是,model.evalutate()不会从网络返回输出值,而仅返回定义的损耗/度量。您可以为此添加一个特定的指标,以从网络返回输出
我想要的是10个元素的数组(或张量),表示网络认为每个输入的输出(使用MNIST,因此希望网络认为每个输出为0-9的概率)
答案 0 :(得分:1)
您可以在内部循环中调用model.fit并设置以下参数
epoch=1
initial_epoch=i \\ So that it trains only the current epoch and batch. 'i' being outer loop variable.
x=inputXs
y=inputYs
这将相应地更新模型中的所有权重。然后,您可以调用model.evaluate或model.predict或model.get_layer来获取要查看的信息。由于现在有了每个图层的信息,您可以通过仅根据需要评估特定的图层来独立检查其输出值(请参阅您提到的行以查看所有概率..etc)
更新后的更改:
let EPOCHS = 10;
let batches = Math.floor(TRAIN_DATA_SIZE/BATCH_SIZE);
for (let i = 0; i < EPOCHS; i++){
for (let j = 0; i < batches; i++){
let inputs = await getNextTrain(BATCH_SIZE,TRAIN_DATA_SIZE, data);
let inputXs = inputs[0];
let inputYs = inputs[1];
model.fit(..on above mentioned params..);
model.evaluate() // To get loss and metric values.
model.predict() // To the final output of the model for input samples given.
model.get_layer() //To get info about a particular layer and then retrieve the required info. Refer https://keras.io/layers/about-keras-layers/
// For example to know the 1st layer's output : model.layers[0].output;
`