3

TensorFlow で単純な非線形モデルを構築しようとしています。このサンプルデータを作成しました:

x_data = np.arange(-100, 100).astype(np.float32)
y_data = np.abs(x_data + 20.) 

ここに画像の説明を入力

この形状は、いくつかの ReLU を使用して簡単に再構築できるはずですが、方法がわかりません。

これまでのところ、私のアプローチは線形コンポーネントを ReLU でラップすることですが、これは実行されません。

W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
W2 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b1 = tf.Variable(tf.zeros([1]))
b2 = tf.Variable(tf.zeros([1]))

y = tf.nn.relu(W1 * x_data + b1) + tf.nn.relu(W2 * x_data + b2)

TensorFlow で ReLU を使用してこのモデルを表現する方法についてのアイデアはありますか?

4

3 に答える 3

0

これは、隠れ層が 1 つある単純なフィードフォワード ネットワークです。

import numpy as np
import tensorflow as tf

episodes = 55
batch_size = 5
hidden_units = 10
learning_rate = 1e-3

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

# normalize the data and shuffle them
x_data = np.arange(0, 1, 0.005).astype(float)
np.random.shuffle(x_data)
y_data = np.abs(x_data + .1)

# reshape data ...
x_data = x_data.reshape(200, 1)
y_data = y_data.reshape(200, 1)

# create placeholders to pass the data to the model
x = tf.placeholder('float', shape=[None, 1])
y_ = tf.placeholder('float', shape=[None, 1])

W1 = weight_variable([1, hidden_units])
b1 = bias_variable([hidden_units])
h1 = tf.nn.relu(tf.matmul(x, W1) + b1)

W2 = weight_variable([hidden_units, 1])
b2 = bias_variable([1])
y = tf.matmul(h1, W2) + b2

mean_square_error = tf.reduce_sum(tf.square(y-y_))
training = tf.train.AdamOptimizer(learning_rate).minimize(mean_square_error)

sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())

for _ in xrange(episodes):
    # iterrate trough every row (with batch size of 1)
    for i in xrange(x_data.shape[0]-batch_size+1):
        _, error = sess.run([training, mean_square_error],  feed_dict={x: x_data[i:i+batch_size], y_:y_data[i:i+batch_size]})
        #print error
        print error, x_data[i:i+batch_size], y_data[i:i+batch_size]


error = sess.run([training, mean_square_error],  feed_dict={x: x_data[i:i+batch_size], y_:y_data[i:i+batch_size]})
print error
于 2016-04-15T06:27:14.927 に答える
0

すべての回答に触発され、受け入れられた回答で提案されたモデルを使用して、このモデルをトレーニングすることができました。コードは次のとおりです。

import tensorflow as tf
import numpy as np

# Create 200 x, y data points in NumPy to represent the function
x_data = np.arange(-100, 100).astype(np.float32)
y_data = np.abs(x_data + 20.) 

W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b1 = tf.Variable(tf.zeros([1]))
W2 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b2 = tf.Variable(tf.zeros([1]))
y = tf.nn.relu(W1 * x_data + b1) + tf.nn.relu(W2 * x_data + b2)

# Minimize the mean squared errors.
mean_square_error = tf.reduce_sum(tf.square(y-y_data))
train = tf.train.AdamOptimizer(learning_rate).minimize(mean_square_error)

sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# Fit the non-linear function.
for step in xrange(50000):
   sess.run(train)
   if step % 10000 == 0:
       #Expected values: W1 = 1., W2 = -1., b1 = 20., b2 = -20.
       print(step, sess.run(W1), sess.run(b1), sess.run(W2), sess.run(b2))
于 2016-04-18T01:34:05.950 に答える