- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试训练神经网络来学习函数 y = x1 + x2 + x3
。目的是尝试使用 Caffe,以便更好地学习和理解它。所需的数据在Python中综合生成并作为lmdb数据库文件写入内存。
数据生成代码:
import numpy as np
import lmdb
import caffe
Ntrain = 100
Ntest = 20
K = 3
H = 1
W = 1
Xtrain = np.random.randint(0,1000, size = (Ntrain,K,H,W))
Xtest = np.random.randint(0,1000, size = (Ntest,K,H,W))
ytrain = Xtrain[:,0,0,0] + Xtrain[:,1,0,0] + Xtrain[:,2,0,0]
ytest = Xtest[:,0,0,0] + Xtest[:,1,0,0] + Xtest[:,2,0,0]
env = lmdb.open('expt/expt_train')
for i in range(Ntrain):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = Xtrain.shape[1]
datum.height = Xtrain.shape[2]
datum.width = Xtrain.shape[3]
datum.data = Xtrain[i].tobytes()
datum.label = int(ytrain[i])
str_id = '{:08}'.format(i)
with env.begin(write=True) as txn:
txn.put(str_id.encode('ascii'), datum.SerializeToString())
env = lmdb.open('expt/expt_test')
for i in range(Ntest):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = Xtest.shape[1]
datum.height = Xtest.shape[2]
datum.width = Xtest.shape[3]
datum.data = Xtest[i].tobytes()
datum.label = int(ytest[i])
str_id = '{:08}'.format(i)
with env.begin(write=True) as txn:
txn.put(str_id.encode('ascii'), datum.SerializeToString())
Solver.prototext 文件:
net: "expt/expt.prototxt"
display: 1
max_iter: 200
test_iter: 20
test_interval: 100
base_lr: 0.000001
momentum: 0.9
# weight_decay: 0.0005
lr_policy: "inv"
# gamma: 0.5
# stepsize: 10
# power: 0.75
snapshot_prefix: "expt/expt"
snapshot_diff: true
solver_mode: CPU
solver_type: SGD
debug_info: true
咖啡模型:
name: "expt"
layer {
name: "Expt_Data_Train"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
data_param {
source: "expt/expt_train"
backend: LMDB
batch_size: 1
}
}
layer {
name: "Expt_Data_Validate"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
data_param {
source: "expt/expt_test"
backend: LMDB
batch_size: 1
}
}
layer {
name: "IP"
type: "InnerProduct"
bottom: "data"
top: "ip"
inner_product_param {
num_output: 1
weight_filler {
type: 'constant'
}
bias_filler {
type: 'constant'
}
}
}
layer {
name: "Loss"
type: "EuclideanLoss"
bottom: "ip"
bottom: "label"
top: "loss"
}
我得到的测试数据的损失是 233,655
。这是令人震惊的,因为损失比训练和测试数据集中的数字大三个数量级。此外,要学习的函数是一个简单的线性函数。我似乎无法弄清楚代码中有什么问题。非常感谢任何建议/意见。
最佳答案
在这种情况下产生的损失很大,因为 Caffe 只接受 uint8
格式的数据(即 datum.data
)和标签(datum.label
),采用 int32
格式。然而,对于标签,numpy.int64
格式似乎也有效。我认为 datum.data
仅以 uint8
格式被接受,因为 Caffe 主要是为计算机视觉任务开发的,其中输入是图像,其 RGB 值在 [0,255] 范围内。 uint8
可以使用最少的内存来捕获此内容。我对数据生成代码进行了以下更改:
Xtrain = np.uint8(np.random.randint(0,256, size = (Ntrain,K,H,W)))
Xtest = np.uint8(np.random.randint(0,256, size = (Ntest,K,H,W)))
ytrain = int(Xtrain[:,0,0,0]) + int(Xtrain[:,1,0,0]) + int(Xtrain[:,2,0,0])
ytest = int(Xtest[:,0,0,0]) + int(Xtest[:,1,0,0]) + int(Xtest[:,2,0,0])
在尝试了网络参数(学习率、迭代次数等)之后,我得到了 10^(-6) 数量级的错误,我认为这非常好!
关于python - Caffe:学习简单线性函数时损失极高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055033/
// Assuming that data are on the CPU initially, and we have a blob. const Dtype* foo; Dtype* bar;
我计划使用 NYU depth v2 数据集实现一个 CNN,它可以从单个图像估计深度。通过本教程,我了解到在 Caffe 上实现处理分类问题的 CNN 很容易。我很好奇 Caffe 是否适合涉及多维
我用图像训练了一个模型。现在想将 fc-6 功能提取到 .npy 文件中。我正在使用 caffe.set_mode_gpu() 运行 caffe.Classifier 并提取特征。 而不是每帧提取和保
我通过 apt install 命令在我的 Ubuntu v18 VM 上安装了 caffe-cpu。我正在努力找出安装目录所在的位置,如果我错了请纠正我,但我相信没有安装目录。我尝试执行的 NN 模
这个问题在这里已经有了答案: how to calculate a net's FLOPs in CNN [closed] (4 个回答) 4年前关闭。 我在tensorflow tutorial看到
似乎this related PR现在已经死了,有没有解决方法可以使用 early stopping在咖啡厅?也许在 Caffe 之上使用 Python? 最佳答案 第一部分很容易手动完成:让我们监控
当我尝试在MacbookPro(El Capitan)上安装最新的caffe时,出现以下错误。怎么了?如何解决? 我在此网站上发现了一些类似的问题,不幸的是显示的修复似乎是ubuntu特有的。 先感谢
average_loss有什么用?有人可以举一个例子或用外行的术语解释吗? 最佳答案 您可以登录 caffe.proto文件。当前版本中的第 151 行对 average_loss 给出了以下注释:
我想先分别处理不同类型的数据,然后将它们融合到一个公共(public)层中。这在 Caffe 中是否可行,如果可以,最好的方法是什么? 我读过可以在同一个 prototxt 文件中定义多个数据层。但是
我正在尝试将几个底部 Blob 合并为一个顶部 Blob ,然后将其馈送到下一层。 这些 Blob 来自不同的卷积/FC层,因此它们的形状不同。 我尝试了 concat 层,但使用轴 0 或 1 时,
包 Digits 需要使用 Caffe 安装目录的位置设置环境变量。 安装Caffe的简单方法是apt-get install caffe-cuda .但是,我无法弄清楚它的安装位置。没有安装在hom
我在 Caffe 中训练过 imagenet。现在我正在尝试为我的模型和 caffe 提供的训练模型计算 ROC/AUC。我有两个问题: 1) ROC/AUC 主要用于二进制类,但我也发现在某些情况下
我正在尝试使我的 Caffe 代码适应 tensorflow。我想知道将我的 train.txt 和 test.txt 转换为适用于 tensorflow 的最佳方法是什么。 在我的 train.tx
有没有办法安装/运行修改后的 Caffe 项目,例如 SegNet或FCN-Berkley-Vision在 Windows 上? 有Microsoft-led project to bring Caf
我想用python设置一个caffe CNN,使用caffe.NetSpec()界面。虽然我看到我们可以把测试网放在 solver.prototxt , 我想写在model.prototxt具有不同的
我有一个预训练的 faster-rcnn caffemodel。我可以使用 net.params[pr][0].data 获取模型的权重。到目前为止,权重是 numpy float32 类型。我想将它
我正在做一个将 keras json 模型转换为 caffe prototxt 的项目 caffe 支持任意填充值 keras(在 tensorflow 之上)支持“相同”和“有效”值 对于 caff
我正在尝试让 CaffeOnSpark 在本地运行,并且我按照 CaffeOnSpark wiki 上的此过程进行操作:https://github.com/yahoo/CaffeOnSpark/wi
我通过caffe使用我自己的数据集训练了网络,现在我想用C++写一个分类代码。我的机器 (linux) 仅适用于 CPU! (我使用 GPU 在 VM 中训练网络)。 当我尝试“包含”特定的 Caff
我知道可以(以编程方式)使用 caffe.Netspec() 设计一个网络,基本上主要目的是编写它的 prototxt。 net = caffe.NetSpec() .. (define) .. wi
我是一名优秀的程序员,十分优秀!