两者都是序列化库,由Google开发人员开发.他们之间有什么大不同吗?将代码从协议缓冲区转移到FlatBuffers是一项艰苦的工作吗?
我的问题是如何从多个(或分片)tfrecords获得批量输入.我已经阅读了示例https://github.com/tensorflow/models/blob/master/inception/inception/image_processing.py#L410.基本的管道,把培训作为集为例,(1)首先产生一系列tfrecords(例如,train-000-of-005,train-001-of-005,...),(2)从这些文件名,生成一个列表并将其塞进了tf.train.string_input_producer获得队列,(3)同时生成一个tf.RandomShuffleQueue做其他的东西,(4)tf.train.batch_join用来生成批量输入.
我认为这很复杂,我不确定这个程序的逻辑.在我的情况下,我有一个.npy文件列表,我想生成分片的tfrecords(多个分离的tfrecords,而不只是一个单个大文件).这些.npy文件中的每一个都包含不同数量的正样本和负样本(2个类).一种基本方法是生成一个单个大型tfrecord文件.但文件太大(~20Gb).所以我采用分片的tfrecords.有没有更简单的方法来做到这一点?谢谢.
我对张量流很困惑tf.layers.batch_normalization.
我的代码如下:
def my_net(x, num_classes, phase_train, scope):
x = tf.layers.conv2d(...)
x = tf.layers.batch_normalization(x, training=phase_train)
x = tf.nn.relu(x)
x = tf.layers.max_pooling2d(...)
# some other staffs
...
# return
return x
def train():
phase_train = tf.placeholder(tf.bool, name='phase_train')
image_node = tf.placeholder(tf.float32, shape=[batch_size, HEIGHT, WIDTH, 3])
images, labels = data_loader(train_set)
val_images, val_labels = data_loader(validation_set)
prediction_op = my_net(image_node, num_classes=2,phase_train=phase_train, scope='Branch1')
loss_op = loss(...)
# some other staffs
optimizer = tf.train.AdamOptimizer(base_learning_rate)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
train_op = optimizer.minimize(loss=total_loss, global_step=global_step)
sess = ...
coord …Run Code Online (Sandbox Code Playgroud) 我发现Eigen的Matrix是默认的列主要,就像MATLAB,但是如何从cv :: Mat初始化Eigen :: MatrixXd?以下代码是我的测试.但是没有一个能够成功编译.请问有人给我一些建议吗?或其他一些链接?谢谢.
cv::Mat A_M=cv::Mat(rows, cols, CV_64FC1);
double *A=(double *)A_M.data();
typedef Map<MatrixXd> MapMat;
MapMat A_eigen(A,m,n);
Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> A_eigen;
Eigen::Map<Matrix<double,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> >(A,m,n) = A_eigen;
Run Code Online (Sandbox Code Playgroud)
更新:
double *A=(double *)A_M.data();//m*n
double *B=(double *)B_M.data();//n*p
double *C=(double *)C_M.data();//m*p
//regular Eigen Matrix
Eigen::MatrixXd A_eigenMat;
Eigen::MatrixXd B_eigenMat;
Eigen::MatrixXd C_eigenMat;
Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> > A_mappedMat (A, m, n);
Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> > B_mappedMat (B, n, p);
Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> > C_mappedMat (C, m, p);
// Eigen handles the conversion from row major to column major …Run Code Online (Sandbox Code Playgroud) 我想测试Intel MKL矩阵乘法,所以我包括,我只是使用cblas_dgemm函数,但它总是说
undefined reference to `cblas_dgemm'
Run Code Online (Sandbox Code Playgroud)
我也链接了-lmkl_core -lmkl_blas95_lp64 -lmkl_lapack95_lp64,但我在$MKLROOT/lib/intel64/目录中的库中有许多组合,错误仍然存在.请问有人给我一些建议吗?谢谢.
在bash脚本文件中,我设置了一个这样的变量:
current_path=`pwd`
sed -i "1s/.*/working_path='$current_path';/" file1.sh
Run Code Online (Sandbox Code Playgroud)
我想运行这个脚本来替换file1.shinto 的第一行working_path='$current_path';,但是在命令中current_path有/和sed,它/是在sed替换模式中预定义的.我试过这个:
current_path1="${current_path/\//\\\/}"
Run Code Online (Sandbox Code Playgroud)
上面这行,我想将/in变量替换current_path成\/,然后输入current_path1到sed命令中,但也有错误.
你能给我一些建议吗?谢谢.
我遇到了一些性能问题,因此我想加快那些运行缓慢的脚本.但我对如何加快它们没有更多的想法.因为我发现我经常被指数所阻挡.我发现抽象思维对我来说非常困难.
脚本是
tic,
n = 1000;
d = 500;
X = rand(n, d);
R = rand(n, n);
F = zeros(d, d);
for i=1:n
for j=1:n
F = F + R(i,j)* ((X(i,:)-X(j,:))' * (X(i,:)-X(j,:)));
end
end
toc
Run Code Online (Sandbox Code Playgroud) 我有一个包含11个样本的数据集.当我选择BATCH_SIZEbe 2时,以下代码将出错:
dataset = tf.contrib.data.TFRecordDataset(filenames)
dataset = dataset.map(parser)
if shuffle:
dataset = dataset.shuffle(buffer_size=128)
dataset = dataset.batch(batch_size)
dataset = dataset.repeat(count=1)
Run Code Online (Sandbox Code Playgroud)
问题在于dataset = dataset.batch(batch_size),当Dataset循环进入最后一批时,剩余的样本数仅为1,那么有没有办法从以前访问过的样本中随机选取一个并生成最后一批?
我已经运行了一个程序来生成具有不同参数的结果R,C并且RP反映在输出文件的目录名中,全部都是命名的results.txt.
例如,在目录名params_R_7_C_16_RP_0的7是参数的值R,16是参数的值C,并0为参数的值RP.
我想获取results.txt当前目录树中的所有文件,按嵌入的值排序R,C并RP在其托管目录中.
我首先使用以下命令来获取results.txt我要解析的文件:
find ./ -name "results.txt"
Run Code Online (Sandbox Code Playgroud)
输出是:
./params_R_11_C_9_RP_0/results.txt
./params_R_7_C_9_RP_0/results.txt
./params_R_7_C_4_RP_0/results.txt
./params_R_11_C_16_RP_0/results.txt
./params_R_9_C_4_RP_0/results.txt
./params_R_5_C_9_RP_0/results.txt
./params_R_9_C_25_RP_0/results.txt
./params_R_7_C_16_RP_0/results.txt
./params_R_5_C_25_RP_0/results.txt
./params_R_5_C_16_RP_0/results.txt
./params_R_11_C_4_RP_0/results.txt
./params_R_9_C_16_RP_0/results.txt
./params_R_7_C_25_RP_0/results.txt
./params_R_11_C_25_RP_0/results.txt
./params_R_5_C_4_RP_0/results.txt
./params_R_9_C_9_RP_0/results.txt
Run Code Online (Sandbox Code Playgroud)
我尝试了以下排序命令:
find ./ -name "results.txt" | sort
Run Code Online (Sandbox Code Playgroud)
这导致词法排序:
./params_R_11_C_16_RP_0/results.txt
./params_R_11_C_25_RP_0/results.txt
./params_R_11_C_4_RP_0/results.txt
./params_R_11_C_9_RP_0/results.txt
./params_R_5_C_16_RP_0/results.txt
./params_R_5_C_25_RP_0/results.txt
./params_R_5_C_4_RP_0/results.txt
./params_R_5_C_9_RP_0/results.txt
./params_R_7_C_16_RP_0/results.txt
./params_R_7_C_25_RP_0/results.txt
./params_R_7_C_4_RP_0/results.txt …Run Code Online (Sandbox Code Playgroud) tensorflow ×3
bash ×2
c++ ×2
matlab ×2
c ×1
eigen ×1
flatbuffers ×1
intel-mkl ×1
matrix ×1
performance ×1
python ×1
qt-creator ×1
sed ×1
sorting ×1
tfrecord ×1