拟合曲线
#coding=utf-8
#https://www.cnblogs.com/qcloud1001/p/6739501.html
import tensorflow as tf
#输入x、y_,估计W、b
x = tf.placeholder(tf.float32)
W = tf.Variable(tf.zeros([1]))
b = tf.Variable(tf.zeros([1]))
y_ = tf.placeholder(tf.float32)
y = W * x + b
lost = tf.reduce_mean(tf.square(y_-y))
optimizer = tf.train.GradientDescentOptimizer(0.0000001)
train_step = optimizer.minimize(lost)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
steps = 1000
for i in range(steps):
xs = [i]
ys = [3 * i]
feed = { x: xs, y_: ys }
sess.run(train_step, feed_dict=feed)
if i % 100 == 0 :
print "After %3d iteration: W:%f, b:%f, lost:%f." \
% (i,sess.run(W),sess.run(b),sess.run(lost, feed_dict=feed))
eigenTensor
//http://eigen.tuxfamily.org/index.php?title=Tensor_support
#include <iostream>
#include <stdlib.h>
#include <unsupported/Eigen/CXX11/Tensor>
using namespace std;
int main(int argc, char **argv){
Eigen::Tensor<double, 3> test(2,2,2);
//第一层(第三维)
test(0,0,0)=1;
test(0,1,0)=2;
test(1,0,0)=3;
test(1,1,0)=4;
//第二层(第三维)
test(0,0,1)=5;
test(0,1,1)=6;
test(1,0,1)=7;
test(1,1,1)=8;
cout<<test<<endl;
Eigen::Tensor<double, 6> epsilon1(2,2,2,2,2,2);
int x=1;
for (int i = 0; i < 2; i++)//6th
for (int j = 0; j < 2; j++)//5th
for (int k = 0; k < 2; k++)//4th
for (int l = 0; l < 2; l++)//3rd
for (int m = 0; m < 2; m++)
for (int n = 0; n < 2; n++)
epsilon1(m,n,l,k,j,i)=x++;
cout<<epsilon1<<endl;
//-------------------------------
Eigen::Tensor<double, 3> epsilon(3,3,3);
epsilon.setZero();
epsilon(0,1,2) = 1;
epsilon(1,2,0) = 1;
epsilon(2,0,1) = 1;
epsilon(1,0,2) = -1;
epsilon(2,1,0) = -1;
epsilon(0,2,1) = -1;
Eigen::Tensor<double, 4> grassmannIdentity(3,3,3,3);
grassmannIdentity.setZero();
// this is not the most efficient way to write such a product,
// but is the only way possible with the current feature set
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
for (int l = 0; l < 3; l++) {
for (int m = 0; m < 3; m++) {
grassmannIdentity(i,j,l,m) += epsilon(i,j,k) * epsilon(k,l,m);
}
}
}
}
}
// verify
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int l = 0; l < 3; l++) {
for (int m = 0; m < 3; m++) {
assert(grassmannIdentity(i,j,l,m) == (int(i == l) * int(j == m) - int(i == m) * int(j == l)));
}
}
}
}
// dimensionalities
assert(epsilon.dimension(0) == 3);
assert(epsilon.dimension(1) == 3);
assert(epsilon.dimension(2) == 3);
auto dims = epsilon.dimensions();
assert(dims[0] == 3);
assert(dims[1] == 3);
assert(dims[2] == 3);
}