I am currently trying out different architectures with Azure ML Ecosystem. Currently, I am testing out Azure ML Studio Designer.
When I created a custom Tensorflow model using the "Create Python Model" Component. When I run the designer pipeline I get an error saying that Tensorlfow is not found.
Error:
---------- Start of error message from Python interpreter ----------
Got exception when importing script: 'No module named 'tensorflow''.
---------- End of error message from Python interpreter ----------
Script in the Task:
# The script MUST define a class named AzureMLModel.
# This class MUST at least define the following three methods: "__init__", "train" and "predict".
# The signatures (method and argument names) of all these methods MUST be exactly the same as the following example.
# Please do not install extra packages such as "pip install xgboost" in this script,
# otherwise errors will be raised when reading models in down-stream modules.
import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.preprocessing import OneHotEncoder
class AzureMLModel:
# The __init__ method is only invoked in module "Create Python Model",
# and will not be invoked again in the following modules "Train Model" and "Score Model".
# The attributes defined in the __init__ method are preserved and usable in the train and predict method.
def __init__(self):
# self.model must be assigned
model = tf.keras.Sequential()
model.add(tf.keras.layers.Convolution1D(filters=2, kernel_size=1,input_shape=(4,1), name='Conv1'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(10, activation='relu', name='Dense1'))
model.add(tf.keras.layers.Dense(10, activation='relu', name='Dense2'))
model.add(tf.keras.layers.Dense(3, activation='softmax', name='output'))
optimizer = tf.keras.optimizers.Adam(lr=0.001)
model.compile(optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
self.model = model
self.feature_column_names = list()
# Train model
# Param<df_train>: a pandas.DataFrame
# Param<df_label>: a pandas.Series
def train(self, df_train, df_label):
# self.feature_column_names records the column names used for training.
# It is recommended to set this attribute before training so that the
# feature columns used in predict and train methods have the same names.
self.feature_column_names = df_train.columns.tolist()
encoder = OneHotEncoder(sparse=False)
df_label = encoder.fit_transform(df_label)
ES = tf.keras.callbacks.EarlyStopping(monitor="val_loss", patience=10)
self.model.fit(df_train, df_label, validation_split=0.1 ,epochs=1000, callbacks=[ES])
# Predict results
# Param<df>: a pandas.DataFrame
# Must return a pandas.DataFrame
def predict(self, df):
# The feature columns used for prediction MUST have the same names as the ones for training.
# The name of score column ("Scored Labels" in this case) MUST be different from any other
# columns in input data.
pred = self.model.predict(df[self.feature_column_names])
return pd.DataFrame({'Scored Labels': np.argmax(pred, axis=1)})
How can I resolve this? I tried the model in a notebook and worked so there is no syntax error, just the issue with Tensorflow.
Directly we cannot install TensorFlow in designer. Instead, we can call the node of the algorithm which includes TensorFlow internally. For example, I am performing Image classification using DenseNet. Checkout the following flow.
This below screen is the complete picture of the flow in the designer.