2017-08-15 31 views
1

當我編譯我的代碼,它要求我的結果如下圖所示:對象類型「圖像」有沒有屬性「fromarray」

D:\Python\Anaconda3\envs\tensorflow\python.exe D:/Python/pycharm_project/test/mnist_chuji 
2017-08-15 14:07:37.587932: W c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE instructions, but these are available on your machine and could speed up CPU computations. 
2017-08-15 14:07:37.588611: W c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE2 instructions, but these are available on your machine and could speed up CPU computations. 
2017-08-15 14:07:37.589142: W c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations. 
2017-08-15 14:07:37.589598: W c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations. 
2017-08-15 14:07:37.590038: W c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations. 
2017-08-15 14:07:37.590437: W c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations. 
Traceback (most recent call last): 
    File "D:/Python/pycharm_project/test/mnist_chuji", line 52, in <module> 
    DisplayArray(u_init, rng=[-0.1, 0.1]) 
    File "D:/Python/pycharm_project/test/mnist_chuji", line 15, in DisplayArray 
    Image.fromarray(a).save(f, fmt) 
AttributeError: type object 'Image' has no attribute 'fromarray' 

Process finished with exit code 1 

這裏是我的代碼(我標誌着中發生的行號錯誤列表):

#導入模擬仿真需要的庫 
import tensorflow as tf 
import numpy as np 

#導入可視化需要的庫 
from PIL import Image 
from io import StringIO #python3 使用了io代替了sStringIO 
from IPython.display import clear_output, Image, display 

def DisplayArray(a, fmt='jpeg', rng=[0,1]): 
    """Display an array as a picture.""" 
    a = (a - rng[0])/float(rng[1] - rng[0])*255 
    a = np.uint8(np.clip(a, 0, 255)) 
    f = StringIO() 
    Image.fromarray(a).save(f, fmt)   #line 15 
    display(Image(data=f.getvalue())) 

sess = tf.InteractiveSession() 

def make_kernel(a): 
    """Transform a 2D array into a convolution kernel""" 
    a = np.asarray(a) 
    a = a.reshape(list(a.shape) + [1,1]) 
    return tf.constant(a, dtype=1) 

def simple_conv(x, k): 
    """A simplified 2D convolution operation""" 
    x = tf.expand_dims(tf.expand_dims(x, 0), -1) 
    y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding='SAME') 
    return y[0, :, :, 0] 

def laplace(x): 
    """Compute the 2D laplacian of an array""" 
    laplace_k = make_kernel([[0.5, 1.0, 0.5], 
          [1.0, -6., 1.0], 
          [0.5, 1.0, 0.5]]) 
    return simple_conv(x, laplace_k) 

N = 500 

# Initial Conditions -- some rain drops hit a pond 

# Set everything to zero 
u_init = np.zeros([N, N], dtype="float32") 
ut_init = np.zeros([N, N], dtype="float32") 

# Some rain drops hit a pond at random points 
for n in range(40): 
    a,b = np.random.randint(0, N, 2) 
    u_init[a,b] = np.random.uniform() 

DisplayArray(u_init, rng=[-0.1, 0.1])   #line 52 

# Parameters: 
# eps -- time resolution 
# damping -- wave damping 
eps = tf.placeholder(tf.float32, shape=()) 
damping = tf.placeholder(tf.float32, shape=()) 

# Create variables for simulation state 
U = tf.Variable(u_init) 
Ut = tf.Variable(ut_init) 

# Discretized PDE update rules 
U_ = U + eps * Ut 
Ut_ = Ut + eps * (laplace(U) - damping * Ut) 

# Operation to update the state 
step = tf.group(
    U.assign(U_), 
    Ut.assign(Ut_)) 

# Initialize state to initial conditions 
tf.initialize_all_variables().run() 

# Run 1000 steps of PDE 
for i in range(1000): 
    # Step simulation 
    step.run({eps: 0.03, damping: 0.04}) 
    # Visualize every 50 steps 
    if i % 50 == 0: 
    clear_output() 
    DisplayArray(U.eval(), rng=[-0.1, 0.1]) 

我不爲什麼我的'圖像'沒有屬性'fromarray'。我已經安裝了lib枕頭。

在開始時,我想也許是因爲在我的電腦中有兩個版本的python(2.7和3.5),導致這個問題。然後,我卸載我所有的python環境,並只安裝枕頭再安裝py3.5。但有沒有幫助...

+0

要導入'Image'兩次? – Malice

+0

只有第二個圖像保持有效,因此腳本中的圖像實際上是類型'IPython.display.Image' – Malice

回答

0

試試這個

#導入模擬仿真需要的庫 
import tensorflow as tf 
import numpy as np 

#導入可視化需要的庫 
from PIL import Image 
from io import StringIO #python3 使用了io代替了sStringIO 
from IPython.display import clear_output, Image as displayImage, display 

def DisplayArray(a, fmt='jpeg', rng=[0,1]): 
    """Display an array as a picture.""" 
    a = (a - rng[0])/float(rng[1] - rng[0])*255 
    a = np.uint8(np.clip(a, 0, 255)) 
    f = StringIO() 
    Image.fromarray(a).save(f, fmt)   #line 15 
    display(displayImage(data=f.getvalue())) 

sess = tf.InteractiveSession() 

def make_kernel(a): 
    """Transform a 2D array into a convolution kernel""" 
    a = np.asarray(a) 
    a = a.reshape(list(a.shape) + [1,1]) 
    return tf.constant(a, dtype=1) 

def simple_conv(x, k): 
    """A simplified 2D convolution operation""" 
    x = tf.expand_dims(tf.expand_dims(x, 0), -1) 
    y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding='SAME') 
    return y[0, :, :, 0] 

def laplace(x): 
    """Compute the 2D laplacian of an array""" 
    laplace_k = make_kernel([[0.5, 1.0, 0.5], 
          [1.0, -6., 1.0], 
          [0.5, 1.0, 0.5]]) 
    return simple_conv(x, laplace_k) 

N = 500 

# Initial Conditions -- some rain drops hit a pond 

# Set everything to zero 
u_init = np.zeros([N, N], dtype="float32") 
ut_init = np.zeros([N, N], dtype="float32") 

# Some rain drops hit a pond at random points 
for n in range(40): 
    a,b = np.random.randint(0, N, 2) 
    u_init[a,b] = np.random.uniform() 

DisplayArray(u_init, rng=[-0.1, 0.1])   #line 52 

# Parameters: 
# eps -- time resolution 
# damping -- wave damping 
eps = tf.placeholder(tf.float32, shape=()) 
damping = tf.placeholder(tf.float32, shape=()) 

# Create variables for simulation state 
U = tf.Variable(u_init) 
Ut = tf.Variable(ut_init) 

# Discretized PDE update rules 
U_ = U + eps * Ut 
Ut_ = Ut + eps * (laplace(U) - damping * Ut) 

# Operation to update the state 
step = tf.group(
    U.assign(U_), 
    Ut.assign(Ut_)) 

# Initialize state to initial conditions 
tf.initialize_all_variables().run() 

# Run 1000 steps of PDE 
for i in range(1000): 
    # Step simulation 
    step.run({eps: 0.03, damping: 0.04}) 
    # Visualize every 50 steps 
    if i % 50 == 0: 
    clear_output() 
    DisplayArray(U.eval(), rng=[-0.1, 0.1]) 
+0

非常感謝!順便說一句,專門理解求解器會不合適嗎?我擔心他們會認爲這是在浪費他們的時間。我認爲這是一個禮貌問題,我在將來應該注意「堆棧溢出」......謝謝。 –

相關問題