簡體   English   中英

如何將 TensorFlow 腳本升級到 TensorFlow 2.0

[英]How to upgrade TensorFlow script to TensorFlow 2.0

我正在嘗試從 2.0 版的 TensorFlow 教程中轉換和運行一種 hello world 腳本,但無論我嘗試什么都無法讓它工作:-(

我嘗試使用 tf_upgrade_v2 腳本,但它也使 python 代碼出現錯誤,因為它似乎無法替換 tf.keras.Input() 語句(原始代碼中的 tf.placeholder 語句)的使用. 因此,我嘗試手動轉換為 2.0,但這似乎也不起作用,因為我被困住了,同時找不到下面顯示的錯誤的解決方案。

我目前正在查看以下代碼,但它會生成以下錯誤消息。 有人看到解決這個問題的方法嗎?

錯誤信息


ValueError                                Traceback (most recent call last)
<ipython-input-25-27dc7c3cea56> in <module>()
      1 # 4. define a Gradient descent optimizer that will minimize the loss defined in the operation 'cost'
----> 2 optimizer = tf.optimizers.SGD(learning_rate=learning_rate, name='SGD').minimize(loss=tf_cost,var_list=[tf_size_factor, tf_price_offset])

2 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in _filter_grads(grads_and_vars)
   1269   if not filtered:
   1270     raise ValueError("No gradients provided for any variable: %s." %
-> 1271                      ([v.name for _, v in grads_and_vars],))
   1272   if vars_with_empty_grads:
   1273     logging.warning(

ValueError: No gradients provided for any variable: ['size_factor:0', 'price_offset:0']. 

Python代碼

# This is a very simple prediction of house prices based on house size, implemented in TensorFlow.
#

import tensorflow as tf
import numpy as np
import math
import matplotlib.pyplot as plt
import matplotlib.animation as animation  # import animation support

# Generating house sizes between 1000 and 3500 (typical sq feet of house)
num_house = 160
np.random.seed(42)
house_size = np.random.randint(low=1000, high=3500, size=num_house)

# Generate house prizes from house size with a random noise added
np.random.seed(42)
house_price = house_size * 100.0 + np.random.randint(low=20000, high=70000, size=num_house)

print ('house_size type:', type(house_size))
print ('house_prize type:', type(house_price))

# Plot generated house and size
plt.plot(house_size, house_price, "bx")  # bx = blue x
plt.ylabel("Price")
plt.xlabel("Size")
plt.show()

# We need to normalize values to prevent under/overflow
def normalize(array):
    return (array - array.mean()) / array.std()

# define number of training samples, 0.7 = 70%. We can take the first 70% since the values are randomized
num_train_samples = math.floor(num_house * 0.7)

# defining training data
train_house_size = np.asarray(house_size[:num_train_samples])
train_price = np.asarray(house_price[:num_train_samples:])

train_house_size_norm = normalize(train_house_size)
train_price_norm = normalize(train_price)

# define test data
test_house_size = np.array(house_size[num_train_samples:])
test_house_price = np.array(house_price[num_train_samples:])

test_house_size_norm = normalize(test_house_size)
test_house_price_norm = normalize(test_house_price)

# Set up the TensorFlow placeholders that get updated as we descend down the gradient
# Replacing tf.placeholder() in TF 1.x with tf.keras.Input() -> https://stackoverflow.com/questions/58986126/replacing-placeholder-for-tensorflow-v2
tf_house_size = tf.keras.Input(name="house_size", shape=(), dtype=tf.dtypes.float32)
tf_price = tf.keras.Input(name="price", shape=(), dtype=tf.dtypes.float32)

print('tf_house_size:', type(tf_house_size))
print('tf_price:', type(tf_price))

# Define the variables holding the size_factor and price we set during training.
# We define them to some random values based on the normal destribution.
tf_size_factor = tf.Variable(np.random.randn(), name="size_factor")
tf_price_offset = tf.Variable(np.random.randn(), name="price_offset")

# 2. Define the operations for the predicting values - predicted price = (size_factor * house_size) + price_offset
# Notice, the use of the tensorflow add and multiply functions. These add the operations to the computation graph,
# AND the tensorflow methods understand how to deal with Tensors. Therefore, do not try to use numpy or other library methods.
tf_price_pred = tf.add(tf.multiply(tf_size_factor, tf_house_size), tf_price_offset)

# 3. Define the loss Function (how much error) - Mean squared error
tf_cost = lambda: tf.reduce_sum(tf.pow(tf_price_pred - tf_price, 2)) / (2 * num_train_samples)

# Optimizer learning rate. The size of the stops down the gradient.
learning_rate = 0.1

# 4. define a Gradient descent optimizer that will minimize the loss defined in the operation 'cost'
optimizer = tf.optimizers.SGD(learning_rate=learning_rate, name='SGD').minimize(loss=tf_cost,var_list=[tf_size_factor, tf_price_offset])

您可以 pip 安裝您想要的任何版本,並按照以下明確的 pip 安裝:

pip install tensorflow==<VersionYouDesire>

如果這不能解決您的問題,我可能會建議切換到較舊/較新的 Python 版本。 據我記得,直到 2019 年底,TF2 才支持 Python 3.7+ 的所有 package。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM